2012-03-18 6 views
0

私は、メソッドの名前が現在呼び出されているメソッドから何であるかを識別できるようにしたいと思います。self.nameがエラーを返しますか? Ruby1.9

#!/usr/bin/env ruby 
class SomeClass 
    def initialize 
    puts self.name 
    end 
end 
p = SomeClass.new 

が、次のエラーが表示さ:私はから呼び出していメソッドを呼び出すにはどうすればよい

./test.rb:4:in `initialize': undefined method `name' <SomeClass:0x007fe4d107ba30 (NoMethodError) 
    from ./test.rb:7:in `new' 
    from ./test.rb:7:in `<main>' 

を私は、次の試してみましたか?

+0

頭が上がっているように、Class#nameメソッドがあります。これはあなたが望むものとは無関係です。 –

+0

[Rubyで現在実行中のメソッドの名前を取得する]の可能な複製(http://stackoverflow.com/questions/199527/get-the-name-of-the-currently-executing-method-in-ruby) –

答えて

4
class SomeClass 
    def initialize 
    puts __callee__ 
    end 
end 
p = SomeClass.new #=> initialize 

__method____callee__ Rubyのメソッドで

+0

参考までに、['__callee__ /' __method__'](http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-callee__)のドキュメントがあります。 (編集:それはURLを駄目にするのでここではそれは普通です: 'http://ruby-doc.org/core-1.9.3/Kernel.html#method-i -__ callee__' –

+0

あなたは気にしないでください。読み込みがあまりありません – megas

2

が、彼らは文字列と配列上で行うことができますように、プログラマがそれらを操作することができ、通常のオブジェクトではありません同義語です。 Methodクラスがname()メソッドを持っているが、あなたはname()メソッドを呼び出すときにこのように、それはSomeClassで検索され、[Object, Kernel, BasicObject]

あるその祖先は、あなたはSomeClass内の任意のメソッド定義にselfをチェックすることで、これを見ることができます。自己としてSomeClassを返します。

したがって、undefined method例外が発生します。 __method__を使用すると、現在のメソッド名を取得できます。

class SomeClass 
    def initialize 
    puts __method__ 
    end 
end 

__method__シンボルを返します。 to_sメソッドを使用すると、メソッドの文字列表現を取得できます。

+0

'Method.name'はメソッドですか?なぜメソッドからself.nameを呼び出すとメソッドの名前が返されないのですか? – rudolph9

+0

私の更新された回答を参照してください。 –

+0

@KurtRudolph' self'はメソッドでは、クラスのインスタンスです。 –

関連する問題