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 に答える