| Wish Tcl/Tk 入門
9. 困ったとき、エラー対策
|
プログラムを作成して実行しても、エラーがでて困るときがたくさ
んあります。そのほとんどが、非常に簡単なことが多いので、チェッ
クしやすいように、エラーに気づきにくいところを説明します。
エラーの文章を良く読んで見ましょう。多くの場合このエラー
の指摘は非常に役に立ちます。該当する行に行く場合には、M-x
goto-line (mule の 場合) を使います。
最初に私が良く間違えたのは、変数を使うとき $ を 付け忘れ
たことです。また、tcl では 必要のないコンマを付けてしまった
ことです。また 必要な 空白を忘れたことです。tcl では できる
限り空白を付けるのが良いです。
unix なら man n command で man が出て来ます。文例は少な
いですが、command の 可能な option はこれで調べることができ
ます。Windows 上の help はもっと強力です。
さすがに 0 からの出発は大変ですので、ここであげた例をい
ろいろ いじってみて動かしてみてください。c 言語や sch script
をやったことがある人は、それほどプログラム言語を書くのは苦労
しないはずです。あとは用語の慣れでプログラムを書くスピードが
速くなると思います。
文字化けする場合には、Unix では EUC コード、Windows では
Shift JIS コードになっているかを再度確認下さい。日本語コード
変換は Unix なら nkf です。Windows でも Free の Soft が いっ
ぱいあります。検索してみてください。tclet では、日本語は使え
ません。(私が方法を知りません。)
時々的を外すエラーの指摘がありますが、この場合には (1)
括弧が足りない、閉じていない、種類が違うなどが考えられます。
とくに
Error in startup script: wrong # args: should be
"proc name args body" while executing ....
の場合は、括弧の関係や種類を見てください。
以下は基本文法と関係しています。
- コマンドは、数行にわたる時には { ... } のように中括弧
ではさみます。中括弧は、コマンドで使います。( ... ) の
小括弧は、計算で使います。論理変数等をまとめるときにも使いま
す。if の時に if { ( ... ) || ( ... ) } のような使い方をしますの
で、if の 外側が時々 ( ... ) になって エラーになります。
誤 if ($i >=1) {exit}
@ @ 中括弧でないとだめ
正 if {$i >=1} {exit}
- if の構文は良くエラーになりました。elseif や else を使
う場合には、コマンドが継続していることを明らかに分かるように、
中括弧でつなぎます。\ で 文章を継続してもよいですが、中括弧
開く { の方が次の行につなげる時に分かりやすいです。
- 変数は大文字小文字を区別します。window 名は 小文字で始
まることが必要のようです。
- global の 変数 list は , コンマで区切らずにスペースで区
切ります。tcl/tk でコンマがでることはほとんどありません。
- if { 論理 } { コマンド } の 論理とコマンドの部分には ス
ペースが必要のようです。これをしないと、error がでます。確認
して見てください。{ .. } や 変数 記号の間には スペースを空け
ることが分かりやすく、多くの場合必要です。
誤 if {$i >=1}{exit}
正 if {$i >=1} {exit}
@ ここに スペースが必要。
- プログラムがどうしても動かない時には、puts コマンドを
たくさんいれて、変数の値を見てください。問題の部分だけ分割出
来るのなら、wish コマンド上で interactive に動かしてください。
Unix 上であれば
% wish で . の window が開きます。
% で コマンドをいれます。
- 文法を勉強しながらプログラムを作るときには、少しずつ作っ
て段々機能を増やすようにします。インターネット上にある例を参
考にすると良いと思います。download できる tcl の 例がいっぱ
いあります。
その他 tclet, socket library, perl/tk
Web 上で tcl/tk を使うには、plugin が必要です。plugin に
関してはまだいろいろ制限が多いので使いずらいです。詳しくは、
ここ を見てください。
plugin を
download すれば、tcl の言語はそのまま Web 上にのります。
html の ソースに
< p >< embed type="application/x-tcl" width=100 height=50 script="
button .bt1 -text {hello world} -command exit
pack .bt1 -fill both -expand yes
">
といれれば ok です。これで Web の表現は飛躍的に大きくなると
思います。
plugin の Site-wide/Custom Install がなされていれば、何
も問題なく動くはずです。下の window が見えますか?