3

現在、私のコードは次のように機能します。

def method_a
  self.method_b ==> 'method_b'
end

def method_b
  puts self.name_of_calling_method
end

def name_of_calling_method
  if  /`(.*)'/.match(caller.first)
    return $1
  else
    return nil
  end
end

method_b が「method_b」を出力する代わりに、呼び出し元のメソッドの名前「method_a」を出力するにはどうすればよいですか?

4

2 に答える 2

3

あなたがname_of_calling_method呼び出されmethod_bたときはmethod_a、呼び出しスタックの 1 エントリ上にあるので、 orではなくcaller[1]inが必要です。name_of_calling_methodcaller.firstcaller[0]

左側に正規表現を配置し、右側にインデックスを配置したため、が直接呼び出された場合と isの場合に追加のチェックcallerは必要ありません-一致しないケースでカバーされます。nilmethod_bcaller[1]nil else

于 2010-04-07T20:00:14.987 に答える
2

に置き換えcaller.firstますcaller[1]

于 2010-04-07T18:44:55.397 に答える