恒定前面的星号是什么意思?

时间:2015-03-19 23:03:01

标签: ruby-on-rails ruby arrays

我看到了*MyModel::MY_CONSTANT

并在MyModel中引用它:

  MY_CONSTANT = [
    :a_field,
    :another_field,
  [

当被称为

permit(:name, *MyModel::MY_CONSTANT)

它扩展到

permit(:name, :a_field, :b_field)

但刚刚发生了什么?

1 个答案:

答案 0 :(得分:3)

我希望它实际上扩展到permit(:name, :a_field, :another_field) :)但是,基本上这就是它在数组上使用时的作用,它接受数组的值并将它们展开,就像它们作为单独的参数提供一样。那么你就可以把这些数组元素发送到一个期望个别参数的方法中。

您也可以在反向使用它,您可以定义如下方法:

def foo *args
end

...当用个别参数调用它时:

foo 'a', 'b', 'c'

...那些最终位于数组foo中的args方法内 - 这对于包装另一个方法非常方便,例如。

def some_method *args
  do_something args.first
  super *args   # call the superclass's `some_method` with whatever args it would have received
end

更新

顺便说一下,here's the official docs关于此运营商。