こんにちは、鄭です。

いまさらながら、Ruby/Tk をやってみようと思ってのっけから引っかかっています。
 (ちなみに、Tcl/Tk は基本的な使い方はわかっているつもりです。C言語から
  みたインタープリタの内部構造は、ぜんぜん知りませんが。)

まず、何はともあれ Ruby_Tk-widget-demo-1.1.tar.gz を展開して、簡単そうな
ところからみてみようとしたのですが、
hello で

	#!/usr/local/bin/ruby
	require 'tk'
	TkButton.new(nil,
		'text'=>"こんにちは、世界",
		'command'=>proc{print "こんにちは、世界\n"; exit}
	).pack
	Tk.mainloop

TkButton.new の引数の ruby 的なシンタックスが了解できません (^_^;;
最初の nil はとりあえずおいておいて、2番目と3番目の  XXX => YYY は、{ と }で
囲まれていれば、ハッシュのオブジェクトなんだなとおもうのですが、{ } が
無い場合どう理解すればいいのでしょうか? (質問1)

この hello の TkButton.new(...).pack は、Tcl/Tk 風に書けば

 button .b1 -text "こんにちは、世界" -command rubyのprocオブジェクト
 pack .b1

をひとつづきに書いたものだと思うのですが、最初の引数 nil はどういう
意味があるのでしょう? (質問2)

どうもいきなり widget demo をみてもわからなそうなので、require 'tk'から
たぐって tk.rb を眺めてみたら
	require "tcltklib"
	require "tkutil"
があります。で、ruby-1.1cx/ext/{tcltklib,tkutil} を覗いてみる事にしました。
ruby-1.1cx/ext/tkutilは、

  TkUtil モジュールを定義してそのメソッドとして eval_cmd を定義しているらしい。
  TkKernel クラスを定義してそのメソッドとして new を定義しているらしい。
	よくわからないけど、new はイテレータとしても使えるらしい。
	C言語レベルの rb_yield_0(obj, obj); は ruby レベルでは
	イテレータブロックにどのようなパラメータがわたるのだろう?
        (これは理解しておく必要があるのだろうか?)

ruby-1.1cx/ext/tcltklibは、ありがたや、README.euc/MANUAL.euc がある、、、
どれどれ、、、

  README.euc:66行目 >>> (`tk.rb' との違い)

え? tk.rb とちがう???? 

       +----------------------------------------------+
       |   Ruby/Tk アプリケーションスクリプト         |
       +---------------------------------------+      |
       |                lib/tk.rb              |      |
       +------------------+--------------------+      |
       |  ext/tkutil拡張  | ext/tcltklib 拡張  |      |
       +------------------+--------------------+------+
       |         ruby インタプリタ本体                |
       +----------------------------------------------+

みたいな、階層構造になっていると理解しかけていたのですが、、、ちがうんで
しょうか? (質問3)

それと、ext/tcltklib/lib/tcltk.rb は、lib/tk.rbを使うときは関係ないのでしょう
か? (質問4)

-- 
                         ┌─鄭  明毅───────────────────┐
                         └──tei / harmony.co.jp──tei / mirage.linc.or.jp─┘