测试矩阵对象是否存在于 TCL 中
Test if matrix object exists in TCL
我想测试 tcl-matrix 对象是否存在。我该怎么做?
以下代码无效。
package require struct::matrix
# Test (now we expect 0)
info exists m
# Create the object
struct::matrix m
# Test again, now I expect 1, however it returns 0!!!
info exists m
使用 info commands
to test for the existence of a matrix object. info exists
测试变量的(不)存在性。
% package req struct::matrix
2.0.3
% info commands m
% struct::matrix m
::m
% info commands m
m
背景
矩阵对象作为 Tcl 命令(准确地说是别名命令)加上每个矩阵的 Tcl 命名空间(作为存储)实现。
或者,但这在很大程度上取决于当前的实现,您可以测试是否存在所谓的命名空间:
% package req struct::matrix
2.0.3
% namespace exists m
0
% struct::matrix m
::m
% namespace exists m
1
例如,当矩阵对象重新实现为 TclOO 对象时,命令测试也将继续工作。
稍作探究 the struct::matrix source code:
% package req struct::matrix
2.0.3
% set m [struct::matrix]
::matrix1
% expr {$m in [interp aliases]}
1
% string first MatrixProc [interp alias {} $m]
18
% proc is_matrix {name} {
expr {
$name in [interp aliases] &&
[string first MatrixProc [interp alias {} $name]] != -1
}
}
% is_matrix $m
1
如果您使用 struct::matrix m
形式,则使用完全限定的 ::m
而不是 $m
% struct::matrix m
::m
% is_matrix m
0
% is_matrix ::m
1
我想测试 tcl-matrix 对象是否存在。我该怎么做?
以下代码无效。
package require struct::matrix
# Test (now we expect 0)
info exists m
# Create the object
struct::matrix m
# Test again, now I expect 1, however it returns 0!!!
info exists m
使用 info commands
to test for the existence of a matrix object. info exists
测试变量的(不)存在性。
% package req struct::matrix
2.0.3
% info commands m
% struct::matrix m
::m
% info commands m
m
背景
矩阵对象作为 Tcl 命令(准确地说是别名命令)加上每个矩阵的 Tcl 命名空间(作为存储)实现。
或者,但这在很大程度上取决于当前的实现,您可以测试是否存在所谓的命名空间:
% package req struct::matrix
2.0.3
% namespace exists m
0
% struct::matrix m
::m
% namespace exists m
1
例如,当矩阵对象重新实现为 TclOO 对象时,命令测试也将继续工作。
稍作探究 the struct::matrix source code:
% package req struct::matrix
2.0.3
% set m [struct::matrix]
::matrix1
% expr {$m in [interp aliases]}
1
% string first MatrixProc [interp alias {} $m]
18
% proc is_matrix {name} {
expr {
$name in [interp aliases] &&
[string first MatrixProc [interp alias {} $name]] != -1
}
}
% is_matrix $m
1
如果您使用 struct::matrix m
形式,则使用完全限定的 ::m
$m
% struct::matrix m
::m
% is_matrix m
0
% is_matrix ::m
1