预期的ArgumentError但得到了NoMethodError

时间:2016-04-03 11:30:25

标签: ruby arguments block

当我在下面的课程中调用单个方法时,我期待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)

1 个答案:

答案 0 :(得分:2)

没什么复杂的。事实上,一个块不是一个参数。使用A时,如果您传递一个块,则将其称为block作为已转换的过程,否则block的值为nil。但在任何一种情况下,block都是将传递的块(既不是参数也不是对象)转换为proc(它是一个对象)的结果。