我有一个简单的class对象,其中包含一组特定的数据。
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发布于 2015-03-25 00:03:21
要做到这一点,最简单的方法是为每个类提供一个“写入通道”方法,其中的序列化格式是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构建创建对象的命令时非常小心,如果对象已经存在,它不会覆盖该对象。
https://stackoverflow.com/questions/29204358
复制相似问题