Tcl 在类方法内定义struct::matrix对象
我有一个使用Tcl 在类方法内定义struct::matrix对象,tcl,Tcl,我有一个使用struct::matrix包的脚本。以下是我正在使用的基本代码: body className::methodName {args} { # ... ::struct::matrix mat set CSV_file_handle [open $CSV_file_path] csv::read2matrix $CSV_file_handle mat , auto close $CSV_file_handle set workbook_
struct::matrix
包的脚本。以下是我正在使用的基本代码:
body className::methodName {args} {
# ...
::struct::matrix mat
set CSV_file_handle [open $CSV_file_path]
csv::read2matrix $CSV_file_handle mat , auto
close $CSV_file_handle
set workbook_list [mat serialize]
# ...
}
执行文件时,会出现错误(忽略了不相关的信息):
当行::struct::matrix mat
被转移到全局范围时,一切正常。当
mat
对象在方法体中定义时,您知道如何使其工作吗
编辑:
忘了提及-从代码中可以看出,我也在使用CSV包 正如格伦·杰克曼所说,这是一个名称空间的问题。如果在全局范围内调用以下语句:
set m [::struct::matrix mat]
puts "m is $m" ;# ==> m is ::mat
但是,在您的类中(我假设您使用Itcl),则名称空间有点不同:
body className::methodName {args} {
# ...
set m [::struct::matrix mat]
puts "m is $m" ;# ==> m is ::className::mat
有一种不同的(如果不是更好的话)方法:使用自动命名,而不必处理名称空间:
body className::methodName {args} {
# ...
set mat [::struct::matrix]
puts "mat is $mat" ;# ==> mat is ::className::matrix1
从现在起,您只需处理
$mat
,它在类的范围内和范围外都起作用。当然,如果您想从另一个方法使用$mat
,则需要将其保存为类变量或从一个方法传递到另一个方法(例如,通过return
语句)。这可能是一个名称空间问题,如下所示:是否可以将“mat”设为全局--::struct::matrix::mat
?
body className::methodName {args} {
# ...
set mat [::struct::matrix]
puts "mat is $mat" ;# ==> mat is ::className::matrix1