构建对象的方法更有效?

时间:2013-01-02 14:14:42

标签: tcl itcl

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

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

1 个答案:

答案 0 :(得分: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的工具来设置默认值。选择一些明智的东西,它们突然间似乎非常自然。

相关问题