Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在命名范围参数列表中,变量前的星号表示什么?_Ruby On Rails_Syntax - Fatal编程技术网

Ruby on rails 在命名范围参数列表中,变量前的星号表示什么?

Ruby on rails 在命名范围参数列表中,变量前的星号表示什么?,ruby-on-rails,syntax,Ruby On Rails,Syntax,我有这样一个命名范围: named_scope :by_items, lambda |*items| { :joins => :items, :conditions => ["items.id in (?)", items.map(&::id)] } Order.by_items(item0, item1, item2) Order.by_items(*Item.find(:all, ...)) *项是什么意思?当我用Item.find(:first,…)调用它

我有这样一个命名范围:

named_scope :by_items, lambda |*items| {
  :joins => :items,
  :conditions => ["items.id in (?)", items.map(&::id)]
}
Order.by_items(item0, item1, item2)
Order.by_items(*Item.find(:all, ...))
*项是什么意思?当我用
Item.find(:first,…)
调用它时,它工作得很好。如果尝试使用集合调用,
Item.find(:all,…)
将失败

从另一个SO问题中,我知道签名应该是:

Order.by_items(item0, item1, ...)
所以,我的问题是,如何将数组转换为逗号分隔的参数列表

更新0

我从中学到:

(在参数列表中使用“*”有助于在ruby中使用变量参数。在参数列表中,*disks表示一个vararg。然后,我可以引用作为名为“disks”的数组传入的所有磁盘。如果我调用另一个带有“*disks”的函数,disks数组的元素将作为单独的参数传入。)

更新1


更多信息。

*项
表示函数接受可变数量的参数。换句话说,如果你这样称呼它:

named_scope :by_items, lambda |*items| {
  :joins => :items,
  :conditions => ["items.id in (?)", items.map(&::id)]
}
Order.by_items(item0, item1, item2)
Order.by_items(*Item.find(:all, ...))
命名作用域lambda函数中的变量
items
将是一个包含3项的数组

要回答你真正的问题,你应该这样称呼它:

named_scope :by_items, lambda |*items| {
  :joins => :items,
  :conditions => ["items.id in (?)", items.map(&::id)]
}
Order.by_items(item0, item1, item2)
Order.by_items(*Item.find(:all, ...))