如何在TCL中为同名实例变量分配局部变量



在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调用中。

最新更新