如何在 Ruby 中传递 splat 参数

  • 本文关键字:splat 参数 Ruby ruby
  • 更新时间 :
  • 英文 :


给定一个具有接受 splat 的方法的类,例如您从 ActiveRecord::FinderMethods 获得的方法:

class Settle
  def self.find(*args)
  end
end

我应该如何从另一个方法(比如另一个类)调用该方法,以便它具有完全相同的签名?

class Settler
  def self.find(*args)
    Settle.find(*args)
  end
end

class Settler
  def self.find(*args)
    Settle.find(args)
  end
end

还是别的什么?请注意,完全相同的签名是重要的部分:Settler.find的工作方式应该与Settle.find完全相同。

但是,我对允许Settler.find签名在更改为完全不同的内容时神奇地更新的代码不感兴趣Settle.find例如 .find(scope, *args) .在这种情况下,更新Settler中的版本没有问题。

它应该是

Settle.find(*args)

这样,所有传递给 Settler.find 的参数也会传递给Settle.find并存储在其中args数组中。因此,两种方法中的args数组具有相同的值。

将参数作为"splat"传递非常简单 - 它只是将数组作为单独的参数传递。所以如果你有

ar = [arg1, arg2, arg3, argn]

some_method(*ar)

相当于

some_method(arg1, arg2, arg3, argn)

最新更新