在Java中,我可以使用与实例变量同名的构造函数参数:
class Obj {
String instanceVar;
Obj(String instanceVar) {
this.instanceVar = instanceVar;
}
}
这能在TCL实现吗?
(我在TCL能找到的最接近的是(:
oo::class create Obj {
variable instanceVar
constructor {_instanceVar} {
set instanceVar _instanceVar
}
}
我也觉得这很烦人!我所做的(当我不只是为实例变量选择不同的名称时(是这样的:
constructor {instanceVar} {
set [my varname instanceVar] $instanceVar
}
或(例如(:
constructor {instanceVar} {
namespace upvar [namespace current] instanceVar iv
set iv $instanceVar
}
但是的,我对此不太满意。在映射的变量名相同的情况下,构造函数可能应该做一些更聪明的事情……但由于一系列复杂的原因,这本身就很棘手。
当我需要这个时,我会包含一个我称为init
的小方法(可以使用包含其他有用方法的mixin或超类来完成(:
method init {args} {
variable {*}$args
}
这允许我这样做:
constructor {instanceVar} {
my init instanceVar $instanceVar
}
如果有更多的变量,您可以将它们添加到my init
调用中。