1

我有一个有几个内部值的类:

private variable layer_type
private variable color
private variable name
private variable thickness
private variable conductivity
private variable permittivity
private variable loss_tangent

我想用用户提供给构造函数的值来启动它们,但是由于它们中有 7 个,为了减少混乱和代码大小,我在一个循环中完成了它:

constructor {in_layer_type in_color in_conductivity in_loss_tangent in_name in_permittivity in_thikness f_row frame} {
    foreach var [list layer_type color conductivity loss_tangent name permittivity thikness] {
        set $var [set in_$var]
    }

在编写所有命令时,这种方法是否有任何区别(性能方面)set

set layer_type $in_layer_type
set color $in_color
#...
set thickness $in_thickness
4

1 回答 1

1

在严格的效率方面,把它全部写出来是最有效的方法。我建议你不要这样做!问题是它很难维护和使用(我不了解你,但我讨厌在所有语言中都有很多强制性位置参数的调用!)相反,尝试这样的事情:

constructor {f_row frame args} {
    foreach {var value} $args {
        if {[string match -* $var]} {
            set [string range $var 1 end] $value
        }
    }
    # ...
}

是的,你需要写一些不同的东西来使用它:

TheClass theObjToMake $theFRow $theFrame -layer_type 12345 ...

如果您这样做,还建议您使用 Itcl 的工具来设置默认值。选择一些明智的东西,这一切都会突然显得自然。

于 2013-01-02T23:13:24.393 回答