Как получить название метода в строковом формате - PullRequest
2 голосов
/ 15 июня 2011

Я звоню Some_other_method внутри Some_method. Я хочу передать имя Some_method на Some_other_method в строковом формате. Как мне это сделать? Что я должен поставить вместо знака вопроса в качестве параметра?

def Some_method
  ...
  Some_other_method (?)
end

Ответы [ 2 ]

4 голосов
/ 15 июня 2011

Использование Kernel#__method__:

Возвращает имя текущего метода в качестве символа. Если вызывается вне метода, он возвращает nil.

Например:

def say_your_name
  puts __method__.to_s
end

Вы можете пропустить to_s, если вас устраивает символ вместо строки.

2 голосов
/ 15 июня 2011

Вы должны использовать object # method для этого.Из документов:

Ищет названный метод в качестве получателя в obj, возвращая объект Method (или вызывая NameError).Объект Method действует как замыкание в экземпляре объекта obj, поэтому переменные экземпляра и значение self остаются доступными.

> user = User.first        
=> #<User id: 1, email: "aslam@mapunity.in", created_at: "2011-05-24 07:17:51", updated_at: "2011-06-02 05:28:37", username: "admin"> 

> meth = user.method(:email)    
=> #<Method: User(#<Module:0x9ceff3c>)#_email> 

> meth.name    
=> :email 

> meth.name.to_s
=> "email" 
...