名称以小写字母开头的方法是公共的,其他是私有的。您也可以使用export 和unexport。
oo::class create C {
method foo args {} ;# public
method Bar args {} ;# private
method Baz args {} ;# private
export Baz ;# now it's public
method quux args {} ;# public
unexport quux ;# now it's private
}
在 Tcl 中,您可以使用多种方法来定义回调。您需要知道对象使用哪个命名空间并将my 方法限定为该命名空间。
在对象内部,可以使用self namespace 或namespace which my 内省命名空间,但最简单的方法是使用namespace code:
namespace code {my readSocket $sock}
namespace code [list my readSocket $sock]
它们之间的区别在于,在上面一行中,$sock 在调用回调时被替换为变量,而在第二行中,它在定义回调时被替换。此调用的结果是一个独立于命名空间的命令前缀,可以由任何评估命令执行。注意sock 必须在上下文中可见:一个常规的命名空间变量是不可见的,除非已经调用了variable; TclOO 类级别的变量在所有方法中都是可见的。
从对象外部,可以使用info object namespace 识别对象的命名空间:
list [info object namespace $obj]::my readSocket $sock
(在定义回调时评估调用方命名空间中的sock。)
文档:
info,
list,
my,
namespace,
oo::class,
oo::define,
Summary of Tcl language syntax