けいじゅ@今はフリー(^^;;;です. 

In [ruby-list :03256 ] the message: "[ruby-list:3256] Re: Ver 1.1 [Re:
Matrix] ", on Jul/03 00:48(+0200) matz / caelum.co.jp (Yukihiro
Matsumoto) writes:

>|こういう技って, rubyで定義(def)した一般の関数では実現不可能ですよね?
>技ってsuperとsuper()を区別すること?

そう. そう.

>それはできません.これはdefine?と一緒で文法に組み込まれてい
>るから出来ることなんですね.この辺がマクロのない言語の限界で
>はないでしょうか.
>
># とはいえDylanのようなマクロを導入したくないし….

そうですねえ....

マクロは, 関数呼出側のコンテキストで処理を進めるところに意味があると思
うのですが, マクロではなくてもいいのでそういう機能をrubyで付加すること
はできないですかねえ? つまり, 呼出側のbindingを呼び出され側で参照する
ことができると色々便利なのですが... そうすると, マクロはなくても同等な
機能を通常の関数で実現できる(苦労のレベルは別として)と思うのですが, い
かがでしょう?

ついでに要望を:
メタプログラミング(rubyのクラスやメソッドを定義するようなプログラム)を
サポートしてくれる機能をもっと充実してくれるとありがたいなぁと最近思う
ようになってきました.

>|なるほど. この辺りはドキュメントにかいてあるようで書いていない秘密の機
>|能になっていますね.
>
>そうでしたっけ? 書いてあると思うんですが.
>
>  caller([level])
>
>  level段上の呼出し元の情報を$@の形式のバックトレース(文字列
>  の配列)として返します.トップレベルでは空の配列を返します.
>
># 公開しているドキュメントではnilを返すことになっていますが,
># 実際には空の配列を返します.

そう. そこまでは書いてあるんですが, それらを $@, $!に代入して利用でき
るようになっているということです. 

>|そうそう. 確認なんですが, fail()は すでに $@, $!が設定されていると, 新
>|たにバックトレースを調べるのではなくて, それらをそのまま引き継ぐんです
>|ね? 
>
>fail/raiseは引数なしで呼び出された時,現在の$!,$@の値をその
>まま使います.つまり同じ例外を再発生するわけですね.

さらに, 今回fail/raiseした場所の情報(バックトレース)を追加しないという
ところが, 味噌ですね.

ところで, $@ が設定された状態で, 引数付きfailを行った場合, $@に今回の
例外と位置が追加されるのですか? それとも最計算される?

__
.........................................石塚 圭樹@今はフリー(^^;;...
------->>また, アドレス変わりました!! e-mail: keiju / bc.mbn.or.jp <<---