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