#早起きしてライセンスでもやろとしたら、げにおもしろげな話題が。

メインストリームのすれっど/Q利用談義からはずれますけど、もともとの問題
意識に興味あり。

Shin'ya Adzumi さん wrote :
>あづみです。
>
>とあるメソッドが呼び出されたときに呼び出し元によって動作を変える
>ようにしたいのですが、呼び出し元のクラスを知る事ってできるのでしょ
>うか?
>
>やりたかったのは以下のような事でして。

>  def recv
>    @queue[呼び出し元のクラス.to_s.downcase].pop
>  end
あづみさんおはようございます。

わたしの場合、「自分を見失うこと」が多いので(笑)デバッグ用に、こういう
メソッド(関数)を用意してます。

def whoami 
 return self.class.name 
end

シッポの".name"がコツで(つけないと :シンボル になる)、これでStringに
落ちますので、これみて挙動を変えるデバッグツール書くとき楽(←あづみさん
の当初の問題意識に近くないっすか?)。##予めクラス名に一定の規則性をつ
けとけばいろいろおもしろいことができたりする(余談)。

んでもって、「自分のことを誰が呼んだか」を知りたいときは、whoami を引数
にしちゃうわけ。
あづみさん的な例を作ると。

def recv(caller, x)
  print "Class:",caller," called me with ",x,"\n"
end 

##recvを呼ぶときは、第一引数を whoami にすること(マクロがほしいとこだ
ね)。
例えば、、使い方↓↓

class Hogehoge
   def callrecv
      recv(whoami, 1)
   end
end

hoge=Hogehoge.new
hoge.callrecv

実行結果:

Class:Hogehoge called me with 1


(最終目的は別にして)当初ねらってたのはこんなワザぢゃなくて??

..Tacos(ozaki / ruby-lang.org)