我是红宝石的新手,找到了以下代码:
def initialize(*)
# ...
end
*
在initialize
参数列表中是什么意思?
答案 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