まつもと ゆきひろです

In message "[ruby-list:3254] Ver 1.1 [Re: Matrix]"
    on 97/07/02, 石塚圭樹 <keiju / bc.mbn.or.jp> writes:
|けいじゅ@まだまだフリー(;_;です. 

|>たんなるsuperはそのメソッドの引数をそのまま引き渡します.
|>super()はスーパークラスの同名のメソッドを引数無しで呼び出し
|>ます.

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

技ってsuperとsuper()を区別すること?

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

# とはいえDylanのようなマクロを導入したくないし….

|>この場合は同じです.caller(1)そのものが$@.shiftの機能を持っ
|>てますから.
|
|なるほど. この辺りはドキュメントにかいてあるようで書いていない秘密の機
|能になっていますね.

そうでしたっけ? 書いてあると思うんですが.

  caller([level])

  level段上の呼出し元の情報を$@の形式のバックトレース(文字列
  の配列)として返します.トップレベルでは空の配列を返します.

# 公開しているドキュメントではnilを返すことになっていますが,
# 実際には空の配列を返します.

|そうそう. 確認なんですが, fail()は すでに $@, $!が設定されていると, 新
|たにバックトレースを調べるのではなくて, それらをそのまま引き継ぐんです
|ね? 

fail/raiseは引数なしで呼び出された時,現在の$!,$@の値をその
まま使います.つまり同じ例外を再発生するわけですね.

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