为什么将方法作为参数 (&block) 传递不起作用?
Why does passing a method as an argument (&block) not work?
clock
占一格:
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
到clock
作为它的块。这个:
clock(dong)
抛出错误:
`clock': wrong number of arguments (1 for 0) (ArgumentError)
谁能解释为什么第一个有效,而第二个无效?您是否必须显式定义要传递的代码块,或者您可以引用另一个方法作为代码块吗?
因为
clock(dong)
不使用 dong
方法作为块调用 clock
,而是使用调用 dong
方法的结果来调用它。因此,你得到参数错误,因为你试图用一个参数调用一个方法(clock
),而它期望 none(除了一个可选块,它不算)。
要在调用中使用 dong
方法作为块,您可以这样做:
clock(&method(:dong))
method(:dong)
会给你一个 Method
对象代表 dong
方法(而不是调用它),而 &
会把它转换成 proc(然后块)。
要传递 块,您必须在大括号内编写块代码(或 do
和 end
)
clock() { dong }
或更简单地说
clock { dong }
clock
占一格:
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
到clock
作为它的块。这个:
clock(dong)
抛出错误:
`clock': wrong number of arguments (1 for 0) (ArgumentError)
谁能解释为什么第一个有效,而第二个无效?您是否必须显式定义要传递的代码块,或者您可以引用另一个方法作为代码块吗?
因为
clock(dong)
不使用 dong
方法作为块调用 clock
,而是使用调用 dong
方法的结果来调用它。因此,你得到参数错误,因为你试图用一个参数调用一个方法(clock
),而它期望 none(除了一个可选块,它不算)。
要在调用中使用 dong
方法作为块,您可以这样做:
clock(&method(:dong))
method(:dong)
会给你一个 Method
对象代表 dong
方法(而不是调用它),而 &
会把它转换成 proc(然后块)。
要传递 块,您必须在大括号内编写块代码(或 do
和 end
)
clock() { dong }
或更简单地说
clock { dong }