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

In [ruby-list :12721 ] the message: "[ruby-list:12721] __
FILE__,__LINE__ への代入(Re: [REQ] rlex.rb) ", on Mar/10 15:32(JST)
Yukihiro Matsumoto writes:

>まつもと ゆきひろです
>
>|行番号についてですが, rlexとかraccでは, __FILE__/__LINE__とかに代入で
>|きると便利ですよね. そうすると, エラーのあったオリジナルファイルの行番
>|号がわかる. >> 松本氏いかが?
>
>「絶対にダメ」とは言いませんが,なんか安易にOKを出したくない
>気分です.現時点では根拠があるわけではなく,しょせん気分なん
>ですが.ちょっと説得してくれません?

使いたい用途は理解できますよね?

Cのline/fileマクロと同じ用途です. これらは, yaccやlexなどのフロントプ
ロセッサで処理したもので大元のファイル名や行番号の表示では約に立つのは
いいですよね?

で, Rubyでその機能で単純に思いつくのは, __FILE__/__LINE__の代入です.
で, なんとなく変更できない方がよいってのもわからんでもないです.

でも, そういう機能は欲しい.

そこで, Rubyには

  eval str, binding, file, line

ってのがありますよね. このevalを使うってのも手ですが, 文字列からevalす
るのは忍びない. で, イテレータを渡せるようになれば良いと思うのです.

  eval(nil, binding, file, line) {...}

または, evalとinstance_evalってレシーバが同じなら同じ働きですよね?

  instance_eval(nil, file, line) {...}

という感じで, イテレータとして使った時でもfile/lineが指定できるという
のでも良いかも.

で, コード生成系のツールは, 直接書き下すのではなくて,
eval/instance_evalイテレータを用いるようにするというものです. 

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---