当我在下面的课程中调用单个方法时,我期待CAVALLOTTI SNC
,但我明白了:
ArgumentError
但这符合预期:
class A
def with_one_argument(&block)
block.call
end
end
A.new.with_one_argument
# => NoMethodError: undefined method `call' for nil:NilClass
有人可以解释为什么class B
def with_one_argument(some_value)
puts some_value
end
end
B.new.with_one_argument
# => ArgumentError: wrong number of arguments (0 for 1)
被视为特殊的?根据我的理解,如果我没有为参数提供默认值,则需要(&block)
。
答案 0 :(得分:2)
没什么复杂的。事实上,一个块不是一个参数。使用A
时,如果您传递一个块,则将其称为block
作为已转换的过程,否则block
的值为nil
。但在任何一种情况下,block
都是将传递的块(既不是参数也不是对象)转换为proc(它是一个对象)的结果。