在Ruby中,有一个"方法"方法,它创建一个方法对象,然后可以将其视为Proc.如果您想进行元编程,这非常有用:
def foobar(method_as_a_string)
2.method(method_as_a_string).call(2)
end
foobar("+")
=> 4
foobar("-")
=> 0
Run Code Online (Sandbox Code Playgroud)
但是,通常情况下,如果你想进行这样的元编程,你会使用send而不是方法......
def foobar(method_as_a_string)
2.send(method_as_a_string, 2)
end
foobar("+")
=> 4
foobar("-")
=> 0
Run Code Online (Sandbox Code Playgroud)
那么Ruby中的"方法"方法有什么意义呢?
一个Method对象提供了各种反省和元编程,包括:
你如何以及如何使用这些权力取决于你.
对于卡里,下面:
"cat".method(:count).receiver
# => "cat"
Run Code Online (Sandbox Code Playgroud)
您可以将method结果传递给块,它将调用传递iteratee 作为参数的方法.
例如,这不起作用:
[1,2,3].each(&:puts)
Run Code Online (Sandbox Code Playgroud)
因为它正在调用1.puts,2.puts等等.但这会:
[1,2,3].each(&method(:puts))
Run Code Online (Sandbox Code Playgroud)
另一个例子:
arr, result = [1,2,3], []
arr.each &result.method(:push)
result # => [1,2,3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |