首页 > 解决方案 > TclOO : my 和 self 有什么区别?

问题描述

该文档可能很好地解释了它,但在我的情况下我看不到这两个命令之间的区别:

method dir {} {
    puts "method dir..."

}

method pseudomethod {} {
    set vardir [my dir]
    set vardir [[self] dir]
}

我能看到的唯一区别是,[self]我可以将它作为过程中的参数传递,而不是使用my.
就我而言,最好的解决方案是什么?
两种解决方案具有相同的性能?

标签: tcl

解决方案


我不确定它们是如何实现的,但您想要使用的一个原因my是访问非导出(私有)方法。一个演示:

oo::class create Foo {
    method PrivateMethod {} {puts "this is PrivateMethod"}
    method publicMethod {} {puts "this is publicMethod"}
    method test {} {
        my publicMethod
        my PrivateMethod
        [self] publicMethod
        [self] PrivateMethod
    }
}

然后:

% Foo create foo
::foo
% foo test
this is publicMethod
this is PrivateMethod
this is publicMethod
unknown method "PrivateMethod": must be destroy, publicMethod or test

my是对象调用其方法的机制。
self是关于如何调用当前方法的自省机制。

花一些时间阅读myself手册页。


推荐阅读