tcl - TclOO : my 和 self 有什么区别?
问题描述
该文档可能很好地解释了它,但在我的情况下我看不到这两个命令之间的区别:
method dir {} {
puts "method dir..."
}
method pseudomethod {} {
set vardir [my dir]
set vardir [[self] dir]
}
我能看到的唯一区别是,[self]
我可以将它作为过程中的参数传递,而不是使用my
.
就我而言,最好的解决方案是什么?
两种解决方案具有相同的性能?
解决方案
我不确定它们是如何实现的,但您想要使用的一个原因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
是关于如何调用当前方法的自省机制。
推荐阅读
- c - 在 C 编程中需要生成 4 个不重复的随机数。1到4
- python - 如何知道 python 中的程序是否在 spyder 中运行?
- omnet++ - 动脉(VEINS 扩展)- LTE 和 IEEE 802.11p 结合
- python - 从 python 类中的另一个方法访问在方法内部创建的变量
- javascript - 使用对象数组展平对象中的数据
- java - 如何在原生 android 和 java 中查找嵌套元素
- tsql - TSQL:尝试简化/优化我的存储过程
- r - 是否有像 ggplot 或 plot 之类的 R 函数以按 id 和不同颜色在同一图中显示我所有的时间序列曲线
- c# - 获取 XML 正文 - 调用肥皂网络服务时出现反序列化错误
- apache-spark - 使用 Spark 从 S3 复制到 HDFS