gpt4 book ai didi

ruby - 为什么将方法作为参数 (&block) 传递不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:02 25 4
gpt4 key购买 nike

clock 占用一个 block :

def clock(&block)
hours = Time.new.hour
puts hours
hours.times do
block.call
end
end

这有效,并根据今天的时间将 “DONG” 显示在屏幕上:

clock do
puts "DONG..."
end

我正在尝试传递 dong 方法:

def dong
puts "DONG..."
end

时钟作为它的 block 。这:

clock(dong)

抛出一个错误:

`clock': wrong number of arguments (1 for 0) (ArgumentError)

有人可以解释为什么第一个有效,而第二个无效吗?您是否必须显式定义要传递的代码块,或者您是否可以将另一个方法引用为代码块?

最佳答案

因为

clock(dong)

不以dong方法作为一个 block 来调用clock,而是以调用dong方法的结果来调用它。因此,您会收到参数错误,因为您尝试使用一个参数调用一个方法 (clock),而它期望没有参数(除了一个可选 block ,该 block 不算在内)。

要在调用中使用dong 方法作为一个 block ,您可以这样做:

clock(&method(:dong))

method(:dong) 会给你一个 Method 对象代表 dong 方法(而不是调用它),而 & 会将其转换为 proc(然后转换为 block )。

关于ruby - 为什么将方法作为参数 (&block) 传递不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35258833/

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