1

我有一个简单的类对象,在 itcl 中有一组特定的数据。

package require Itcl
itcl::class myDataSet {
    public variable var1 "data1"
    public variable var2 "data2"
    public variable var3 "data3"

    method setVals { v1  v2 v3 } {
        set var1 $v1
        set var2 $v2
        set var3 $v3
    }
}

myDataSet dataObj1
dataObj1 setVals "1" "abc" "1.23"

有没有一种方法可以像在 C 中那样将 itcl 对象直接写入外部文件?

就像是,

set fPtr [open "myStorageFile" "w"]
puts $fPtr dataObj1
close $fPtr
4

1 回答 1

2

最简单的方法是给每个类一个“将自己写入通道”方法,其中序列化格式是 Tcl 脚本。由于您有设置所有值的方法,这很容易:

method saveYourself {channel} {
    puts $channel "if {\"$this\" ni \[[list info commands $this]\]} {"
    puts $channel [list [$this info class] $this]
    puts $channel [list $this setVals $var1 $var2 $var3]
    puts $channel "}"
}

你会这样称呼它:

set fPtr [open "myStorageFile" "w"]
dataObj1 saveYourself $fPtr
close $fPtr

然后,将对象重新加载source到您将其写入的文件中即可。请注意,我小心地使用list构建命令来创建对象,并且如果对象已经存在,它不会覆盖该对象。

于 2015-03-24T16:03:20.687 回答