Tcl 调用$this与否的区别

Tcl 调用$this与否的区别,tcl,incr-tcl,Tcl,Incr Tcl,使用Tcl8.5,在方法内部调用$this和不调用它之间有区别吗?e、 g: package require Itcl namespace import itcl::* class MyCls { method foo {} method bar {} } body MyCls::bar {} { return "hi" } body MyCls::foo {} { puts [$this bar] # OR puts [bar] } 您只需添加一个bar的全

使用Tcl8.5,在方法内部调用$this和不调用它之间有区别吗?e、 g:

package require Itcl
namespace import itcl::*

class MyCls {
    method foo {}
    method bar {}
}

body MyCls::bar {} { return "hi" }

body MyCls::foo {} {
  puts [$this bar]
  # OR
  puts [bar]
}

您只需添加一个bar的全局实现即可尝试此操作。如下所示-没有区别。该类只是添加了另一个级别,以便在进入全局命名空间之前检查该过程

% package require Itcl
% namespace import itcl::*
% class C {method foo {}; method bar {}}
% body C::bar {} {return "C::bar"}
% body C::foo {} { puts [$this bar]; puts [bar] }
% C c
c
% c foo
C::bar
C::bar
%

这不是tcl特有的,但通常用于将签名参数与对象字段区分开来。例如,您有一个带有字段栏的类,然后您有一个带有参数栏的方法,也可以->使用this.bar=bar您可以定义要访问的本地栏或字段。不理解该类只是添加了。。。全局命名空间。的确,我可以尝试一下,但通过这个简单的测试,我可能会遗漏一些功能上的差异…@Dor当Tcl查找如何执行命令时,它会沿着名称空间的“路径”进行逻辑查找,以查看命令是否存在。默认情况下,它首先在当前名称空间中查找,然后在全局名称空间中查找。Itcl将类名称空间插入这两个名称空间之间,并使用其他一些魔法使方法显示为命令。Tcl 8.5还允许您在路径中插入自己的附加项。