方法列表:始终调用方法

时间:2016-12-09 18:21:31

标签: ruby list methods

如何在不运行方法的情况下制作方法列表并使用后者?

例如

def somedef
  (anything)
end
a = [system("echo 'hello'"), 1, somedef]

输入a=[system("echo 'hello'"), 1, somedef]后,您获得hellosomedef方法的结果。但我希望例如使用。中的方法连接列表。

4 个答案:

答案 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])

它只是本页其他好答案的替代品。它是一个弱合同(您必须知道您发送此消息的对象将对它们做出响应),但对于某些情况可能已经足够了。