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/