gpt4 book ai didi

ruby - 将 block 作为关键字参数传递

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:50 25 4
gpt4 key购买 nike

是否有可能(如果是的话如何)在 ruby​​ 方法中将 block 作为关键字参数传递?

基本上,我想做

pippo(even: {|n| n+1 }, odd: {|n| n-1})

这样定义方法

def pippo(even: , odd:)
even? ? even.yield(self) : odd.yield(self)
end

谢谢

最佳答案

不,这是不可能的。 block 不是对象,您不能将它们作为参数传递,除了作为 block 参数。它们是一种轻量级的句法和语义构造,允许作为消息发送的 block 参数。 block 的轻量级基于最多只能有一个 block 这一事实,因此它不需要命名和/或绑定(bind)到参数。

但是,您可以 做的是传递多个 Proc 或 lambda。毕竟,Proc 和 lambda 是与任何其他对象一样的对象,因此您可以像任何其他对象一样将它们作为参数传递:

pippo(even: -> n { n+1 }, odd: -> n { n-1 })

def pippo(even: , odd:)
if even? then even.(self) else odd.(self) end
end

实际上,这允许您传递响应call任何 对象,例如一个方法:

pippo(even: 1.method(:+), odd: 1.method(:-))

关于ruby - 将 block 作为关键字参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40374314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com