10

Camping当我看到一个像这样使用 splat 的构造函数时,我正在浏览代码库:

class Fruit 
  def initialize(*)
  end
end

我尝试在此站点和 Google 上查找“没有变量名的 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

如果这个问题还没有被问过,有人可以解释一下这个语法的作用吗?

4

2 回答 2

8

通常,像这样的 splat 用于指定方法未使用但超类中相应方法使用的参数。这是一个例子:

class Child < Parent
  def do_something(*)
    # Do something
    super
  end
end

这就是说,在超类中调用此方法,将所有提供给原始方法的参数传递给它。

来源:Programming ruby​​ 1.9 (Dave Thomas)

于 2013-08-01T03:03:15.187 回答
4

它的行为类似于 *args 但你不能在方法体中引用 then

def print_test(a, *)
  puts "#{a}"
end

print_test(1, 2, 3, 'test')

这将打印 1。

于 2013-08-01T03:04:41.177 回答