その方が良いと私が同意する場合でもproc
、次の 2 つの方法を試すことができます。
最初のものは、グループ化に二重引用符を使用する"..."
ことです。これは中括弧に似ていますが、変数の展開とコマンドの置換が可能です。コードは次のようになります。
$g marker bind $point <Button-1> "$table HighLightCell 1 [expr [lindex $value 1] + 3] ; __highlight_selected $table $sparam $eyes sparam_eyes $graph"
(セミコロンはエスケープされないことに注意してください。)
2 つ目は、 を使用しeval
て、2 つのコマンドの実行を延期することです。これを試すことができます:
$g marker bind $point <Button-1> [list eval $table HighLightCell 1 [expr [lindex $value 1] + 3] \; __highlight_selected $table $sparam $eyes sparam_eyes $graph]
eval
引数によって形成されたコマンドでインタープリターを呼び出すだけです。その中にセミコロンがある場合、コマンドは 2 つになります。今回はセミコロンをエスケープする必要があります。これはeval
、前ではなく によって解釈される必要があるためです。
次の簡単なコードで両方の方法を試しましたが、どちらも機能します。
set x 1
set y 2
pack [button .b1 -text Test1]
pack [button .b2 -text Test2]
bind .b1 <Button-1> "puts $x; puts $y"
bind .b2 <Button-2> [list eval puts $x \; puts $y]
どちらのボタンをクリックしても同じ結果が得られます。
1
2
expr
もう1つ、コマンドの引数を中かっこの中に入れる方が良いので、コードで置き換える必要があります
expr [lindex $value 1] + 3
と
expr {[lindex $value 1] + 3}
$value
変数の置き換えやlindex
コマンドの実行について心配する必要はありませんexpr
。詳細については、wiki ( http://wiki.tcl.tk/583 ) またはexpr
マニュアル ページ ( http://www.tcl.tk/man/tcl8.5/TclCmd/expr.htm ) を参照してください。 )。