clock 采取一个块:
def clock(&block)
hours = Time.new.hour
puts hours
hours.times do
block.call
end
end
Run Code Online (Sandbox Code Playgroud)
这可以工作,并"DONG"根据今天的小时数放在屏幕上:
clock do
puts "DONG..."
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试传递dong方法:
def dong
puts "DONG..."
end
Run Code Online (Sandbox Code Playgroud)
到clock作为其块.这个:
clock(dong)
Run Code Online (Sandbox Code Playgroud)
抛出错误:
`clock': wrong number of arguments (1 for 0) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么第一个有效,但第二个没有?您是否必须明确定义要传递的代码块,还是可以将另一个方法作为代码块引用?
因为
clock(dong)
Run Code Online (Sandbox Code Playgroud)
不会调用clock与dong方法块,它调用的结果调用它dong的方法.因此,您会得到参数错误,因为您尝试clock使用一个参数调用method(),而它期望没有(除了可选块,不计数).
要dong在调用中将该方法用作块,您可以执行以下操作:
clock(&method(:dong))
Run Code Online (Sandbox Code Playgroud)
method(:dong)将为您提供一个Method表示该dong方法的对象(而不是调用它),同时&将其转换为proc(然后再转换为块).
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |