ruby - `initialize` 似乎检查给 `new` 的参数

标签 ruby new-operator initializer

我正在查看这段代码:

class Mo
  def new(indy, rome = 1)
    initialize(indy, rome)
  end
  def initialize(indy, rome)
    ...
  end
end

Mo.new(2)

我得到这个输出:

test.rb:6:in `initialize': wrong number of arguments (1 for 2)   (ArgumentError)

如果我在 new 的定义中添加 rome 的默认值,它会起作用:

class Mo
  def new(indy, rome = 1)
    initialize(indy, rome)
  end
  def initialize(indy, rome = 1)
    ...
  end
end

Mo.new(2)

为什么?

最佳答案

因为 Mo.new(2) 调用方法 Mo.new,它默认调用方法 Mo#initialize 与单个它收到的参数 2,但是您的 Mo#initialize 需要两个参数。

关于ruby - `initialize` 似乎检查给 `new` 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37794481/

相关文章:

ruby - 在字符串上使用 Ruby,如何使用 RegEx 在字符串的两个部分之间进行切片?

Ruby off Rails FactoryGirl ArgumentError : wrong number of args (0 for 1)

C++ 新的内存分配碎片

ios - 在此示例中使用隐式解包可选的意义何在?

javascript - Rails xhr.send( ( options.hasContent && options.data ) || null );错误

ruby-on-rails - 如何将 Twitter Bootstrap 安装到我的 rails

c++ - 使用重载的普通 new 运算符放置 new

c++ - 替换函数 'operator new' 无法声明 'inline' [-Werror,-Winline-new-delete]

css - 背景图像不会显示使用 HTML5 样板

c++ - 对静态数组的初始值设定项列表大小错误发出警告