gpt4 book ai didi

ruby - 为什么没有 block 参数的方法定义可以接受 block ?

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

为什么没有 block 参数的方法定义可以接受 block ?这是演示代码:

def fun
yield
end
fun {puts 'hello ruby'}

最佳答案

因为这就是 ruby​​ 的工作原理。任何方法都可以传递一个 block 。该方法负责检查是否 block_given?并在需要时 yield

这是隐式 block 传递。当你声明一个 block 参数时,会发生一些不同的事情: block 被转换为 Proc 对象,这样它就可以像函数一样被调用并作为参数传递。你不能用隐式 block (AFAIK)做到这一点。

def foo &block
block.call 3
bar block
end

# this method expects proc as a regular parameter (not a block), so you can pass
# a block in addition to it (if you so desire)
def bar block
block.call 4
end

foo do |x|
puts "this is #{x}"
end
# >> this is 3
# >> this is 4

关于ruby - 为什么没有 block 参数的方法定义可以接受 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469096/

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