字符串中的引用方法名称

Jon*_*ard 2 ruby methods

人们可以这样做:

s="puts"
send(s,"Hello World!")
# => Hello World!
Run Code Online (Sandbox Code Playgroud)

如何检查是否s是一种方法?如果它是:

s="nomethod"
Run Code Online (Sandbox Code Playgroud)

send(s,arg) 将失败.

这很酷:

ismethod? s

PS我正在从PHP移植一些东西,它依赖于:

if (function_exists($s)) 
    ...
Run Code Online (Sandbox Code Playgroud)

如果只有Ruby有这么简单的东西.

Dav*_*son 6

试试这个:

respond_to?(method_name)
Run Code Online (Sandbox Code Playgroud)

如果当前对象(self)通过该名称响应方法,则它应返回true.您可以respond_to?在任何Ruby对象上使用.

http://ruby-doc.org/core/Object.html#method-i-respond_to-3F

  • (ps上面的TypeError可能是因为`puts`返回`nil`.) (2认同)