2012-03-18 3 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

머리를 위로하는 것처럼 클래스 # 이름 메서드가 있습니다.이 메서드는 원하는 것과 관련이 없습니다. –

+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__ 루비 방법에

+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'는 메서드를 호출하면 클래스의 인스턴스입니다. –

관련 문제