Ruby,使用*初始化方法

时间:2018-08-07 08:19:06

标签: ruby-on-rails ruby

我是红宝石的新手,找到了以下代码:

def initialize(*)
  # ...
end

*initialize参数列表中是什么意思?

1 个答案:

答案 0 :(得分:1)

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

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

通常用super进行调用,以接受来自父类的参数,也许不需要的话。

例如,根据您的用法:

class MyClass
  def initialize(*)
  end
end

以下内容可以正常工作:

MyClass.new(1, 2, 3, 4, 5, 'etc')
MyClass.new

尽管在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