如何以字符串格式获取方法的名称

时间:2011-06-15 06:40:33

标签: ruby string method-names

我在Some_other_method内拨打Some_method。我想以字符串格式将名称Some_method传递给Some_other_method。我该怎么做?我应该把什么代替问号作为参数?

def Some_method
  ...
  Some_other_method (?)
end

2 个答案:

答案 0 :(得分:4)

使用Kernel#__method__

  

以符号形式返回当前方法的名称。如果在方法之外调用,则返回nil。

例如:

def say_your_name
  puts __method__.to_s
end

如果您对符号而不是字符串感到满意,则可以不使用to_s

答案 1 :(得分:2)

您应该使用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"