当splat操作符没有变量名时,它会做什么?

时间:2013-08-01 02:52:18

标签: ruby

当我看到一个像这样使用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

如果还没有提出这个问题,有人可以解释这种语法的作用吗?

2 个答案:

答案 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。