あおきです。

  In mail "[ruby-list:28341] Re: argument to instance_eval block(Re:"
    keiju / ishitsuka.com (石塚圭樹) wrote:

> けいじゅ@日本ラショナルソフトウェアです.

> >> そうですねえ。たぶんぼくは石塚さんの次くらいに  (^^;;
> >> instance_eval 使いまくってる自信がありますが、困ったことはないです。

> 何か使いまくっているような書き方されていますが... 

いやいや、相対指定ですから(笑)


> instance_evalよりも module_eval/evalのほうが使用頻度はズート多いですね
> (^^;;;

それは同感です。ぼくは明らかに module_eval が一番多いっす。

どれくらい違うのか grep */*.rb | wc -l してみると、

  instance_eval   19
  module_eval     34
  eval            19

意外に少ない。

ちなみに instance_eval の目的別内訳は

  インスタンス変数アクセス  11
  一時環境作成               6
  よくわかんない             2

でした。やっぱりインスタンス変数アクセスが多いみたい。
一方 module_eval は「メソッドを定義するメソッド」がほとんどでした。
(かなり、相当、かたよってるかも  ^^;;)


> やはり, instance_evalを意味もなく使いまくるのは良くないでしょう.

御意。


> 最近はprotectedができたのでだいぶ必要性は少なくなっていますが... C++の
> friend見たいのがあればさらによいのかも.

ぼくは継承の壁を越えたいときは private にして __send__ 使うように
してます。instance_eval よりはちょっと気楽なので。
-------------------------------------------------------------------
青木峰郎