测试TCL中是否存在矩阵对象

测试TCL中是否存在矩阵对象,tcl,exists,Tcl,Exists,我想测试对象是否存在。我该怎么做 以下代码不起作用 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 用于测试矩阵对象是否存在。测试变量是否存在 % package req struct::ma

我想测试对象是否存在。我该怎么做

以下代码不起作用

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
用于测试矩阵对象是否存在。测试变量是否存在

% 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对象时,对该命令的测试也将继续工作。

通过以下方式:

如果使用
struct::matrix m
表单,则使用完全限定的
::m
而不是
$m

% struct::matrix m
::m
% is_matrix m
0
% is_matrix ::m
1

如果命令是一个
struct::matrix
,或者我们这里说的是duck类型,那么有没有合理的方法来询问该命令?显然,这需要了解struct::matrix的当前实现。如果它在将来的某个tcllib版本中发生更改,则此答案将无效。
% struct::matrix m
::m
% is_matrix m
0
% is_matrix ::m
1