当我看到一个像这样使用splat的构造函数时,我正在浏览Camping
代码库:
class Fruit
def initialize(*)
end
end
我试着在这个网站和谷歌上查找“没有变量名称的splat”,但是除了有关splat的信息之外我找不到任何关于变量名称的信息,例如*some_var
,但不是没有它。我尝试在repl上玩这个,我试过像:
class Fruit
def initialize(*)
puts *
end
end
Fruit.new('boo')
但是遇到了这个错误:
(eval):363: (eval):363: compile error (SyntaxError)
(eval):360: syntax error, unexpected kEND
(eval):363: syntax error, unexpected $end, expecting kEND
如果还没有提出这个问题,有人可以解释这种语法的作用吗?
答案 0 :(得分:8)
通常,像这样的splat用于指定方法未使用但超类中相应方法使用的参数。这是一个例子:
class Child < Parent
def do_something(*)
# Do something
super
end
end
这就是说,在超类中调用这个方法,传递给原始方法的所有参数。
来源:编程ruby 1.9(戴夫托马斯)
答案 1 :(得分:4)
它的行为类似于* args,但你不能在方法体
中引用它def print_test(a, *)
puts "#{a}"
end
print_test(1, 2, 3, 'test')
这将打印1。