当我调用下面类中的各个方法时,我期待 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)
被视为特殊吗?根据我的理解,如果我不为参数提供默认值,则需要 ArgumentError
。
最佳答案
没什么复杂的。事实很简单, block 不是一个参数。与A
,如果您传递一个 block ,则该 block 将被称为 block
作为转换后的过程,否则 block
值为 nil
。但无论哪种情况,block
是将传递的 block (既不是参数也不是对象)转换为 proc(它是对象)的结果。
关于ruby - 预期为 ArgumentError 但得到 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36384857/