是否有可能(如果是的话)如何在ruby方法中将块作为关键字参数传递?
基本上,我想做
pippo(even: {|n| n+1 }, odd: {|n| n-1})
Run Code Online (Sandbox Code Playgroud)
将方法定义为此类
def pippo(even: , odd:)
even? ? even.yield(self) : odd.yield(self)
end
Run Code Online (Sandbox Code Playgroud)
谢谢
不,这是不可能的.块不是对象,除了作为块参数之外,不能将它们作为参数传递.它们是一种轻量级的语法和语义结构,只允许作为消息发送的块参数.块的轻量级基于以下事实:最多可以存在一个块,因此不需要命名和/或绑定到参数.
但是,你可以做的是传递多个Procs或lambdas.毕竟,Procs和lambdas是任何其他对象的对象,因此您可以像任何其他对象一样将它们作为参数传递:
pippo(even: -> n { n+1 }, odd: -> n { n-1 })
def pippo(even: , odd:)
if even? then even.(self) else odd.(self) end
end
Run Code Online (Sandbox Code Playgroud)
实际上,这允许您传递响应的任何对象call,例如Method:
pippo(even: 1.method(:+), odd: 1.method(:-))
Run Code Online (Sandbox Code Playgroud)