Ruby,用 * 初始化方法

Bis*_*wal 1 ruby ruby-on-rails

我是 ruby​​ 新手,发现了这段代码:

def initialize(*)
  # ...
end
Run Code Online (Sandbox Code Playgroud)

参数列表*中的含义是什么?initialize

SRa*_*ack 5

这意味着它对传递给它的参数不加区别,即您可以根据需要传递任意数量的参数。

它们是“一次性”参数,因为您随后无法访问它们。如果您想随后访问它们,可以使用常见的模式def initialize(*args)并通过 访问数据args

通常会调用它super来接受来自父类的参数(也许不需要它们)。

例如,根据您的用法:

class MyClass
  def initialize(*)
  end
end
Run Code Online (Sandbox Code Playgroud)

以下内容将正常工作:

MyClass.new(1, 2, 3, 4, 5, 'etc')
MyClass.new
Run Code Online (Sandbox Code Playgroud)

虽然 Ruby 规范中有介绍,但它基本上没有文档记录:

it "accepts an unnamed '*' argument" do
  def foo(*); end;

  foo.should == nil
  foo(1, 2).should == nil
  foo(1, 2, 3, 4, :a, :b, 'c', 'd').should == nil
end
Run Code Online (Sandbox Code Playgroud)