如何在不运行方法的情况下制作方法列表并使用后者?
例如
def somedef
(anything)
end
a = [system("echo 'hello'"), 1, somedef]
输入a=[system("echo 'hello'"), 1, somedef]
后,您获得hello
和somedef
方法的结果。但我希望例如使用。中的方法连接列表。
答案 0 :(得分:1)
使用proc
a = [Proc.new {system("echo 'hello'")}, Proc.new {1}, Proc.new{somedef}]
每当你必须执行方法时,执行proc。的调用方法。
a[0].call #Output: hello
a[1].call #Output: 1
答案 1 :(得分:1)
在Ruby中,您可以在调用方法时省略括号。 (我很惊讶你以前从未见过这个,因为这样做确实很常见。)因此,你所做的只是调用方法。
如果要将方法作为对象引用,可以调用method
方法,该方法返回Method
个对象:
a = [system("echo 'hello'"), 1, method(:somedef)]
答案 2 :(得分:1)
使用method():
def hello
system("echo 'hello'")
end
=> nil
a = [method(:hello), 1]
=> [#<Method: Object#hello>, 1]
foo[0].call
hello
=> true
答案 3 :(得分:1)
根据您的需求,您还可以保存符号,然后在必要时将其发送到相应的对象。例如:
def some_def
...
end
a = [:some_def]
self.send(a[0])
它只是本页其他好答案的替代品。它是一个弱合同(您必须知道您发送此消息的对象将对它们做出响应),但对于某些情况可能已经足够了。