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, ...))