まつもと ゆきひろです

In message "[ruby-list:3406] Re: meta programming features"
    on 97/07/23, 石塚圭樹 <keiju / bc.mbn.or.jp> writes:

|けいじゅ@今はフリー(^^;;;です. 
|
|3度めの再送です(;_;

すんません.

|勝手に用語を作るというてもありますね,
|
|  juwels(宝石)
|  gems(宝石)
|  treasures(たから)
|  heirlooms(先祖伝来の家財, 家宝)
|  ingredients(成分)
|
|とかね(^^;;; 
|
|# やっぱ, クラスは宝ですから(^^;;; 個人的には heirlooms がイメージに...

じゃあ legacy でしょう.

とはいえ,rubyではわりとオーソドックスにまとめていて,極力新
しい用語は導入していないんで,全く新しい用語には抵抗があるん
ですけど.

例示された中では ingredients くらいならなんか伝わる気がしま
すけど.

|>|class methodと比較しての instance methodのつもりでした.
|
|>なるほど,これは納得できますね.
|
|まあ, どちらにしても用語としてどういう風に決めたいか松本氏が決めないと...

Module#instance_methods, Object#methodsで納得しました.これ
は作りましょう.

|>|こういう機能があれば, 
|>|
|>|  a = "Foo"
|>|  eval "A = a", Foo.class_binding + {:a => a}
|>|
|>|の様な使い方ができるようになりますよね.
|>
|>うぅ,これは今の実装ではつらいですねえ.rubyの束縛(の実装)は
|>もっと静的なんですよ.どうしようかなあ.
|
|もしかしたらコンパイル時(起動時)に決定される??

以下のことが静的に決定されます.

  * ある識別子がローカル変数かどうか
  * あるローカル変数が動的ローカル変数かどうか

|それだったら, 変数名だけは固定でもいいですよ.
|
|a1 = "Foo"
|eval "A = a", Foo.class_binding.add_bind{|a| a = a1}
|
|みたいな. 
|# a=>a1をadd_bindで行っている.

これでも外側のスコープでaがローカル変数として代入されている
場合とそうでない場合で挙動が違ってしまいます.

|あと, procみたいにeval時に引数を渡す方法もないではないですね.

|a = "Foo"
|eval "|a| A = a", Foo.class_binding, a

evalじゃない別のものになってしまいますけど,これはこれで意味
があるのかなあ.

|a = "Foo"
|eval "A = a", Foo.class_binding, :a => a
|
|みたいな... 

こっちはだめです.rubyのローカル変数はコンパイル時にスタック
フレームに対するオフセットにまで展開されてしまいますから(し
かもスタックフレームは共有している),シンボルを与えて束縛を
オーバーライドするようなやり方はむずかしいです.

クラススコープが必要な操作に対して(たとえば定数を外部から定
義するような)個別のAPIを定義する方向にしませんか?

                                まつもと ゆきひろ /:|)