Ter*_*ber 20 syntax ruby-on-rails
我有一个像这样的命名范围:
named_scope :by_items, lambda |*items| {
:joins => :items,
:conditions => ["items.id in (?)", items.map(&::id)]
}
Run Code Online (Sandbox Code Playgroud)
什么*item意思?当我打电话给它Item.find(:first, ...)时工作正常.如果我尝试使用集合进行调用,Item.find(:all, ...)则会失败.
从一个不同的SO问题,我知道签名应该是:
Order.by_items(item0, item1, ...)
Run Code Online (Sandbox Code Playgroud)
所以,我的问题还真是,我怎么把一个数组转换成一个逗号分隔的参数列表?
UPDATE0
来自Martin Fowler我了解到:
(在参数列表中使用"*"有助于处理ruby中的变量参数.在参数列表中*disks表示vararg.然后我可以将所有传入的磁盘称为名为"disks"的数组.如果我调用另一个带有"*disks"的函数,磁盘数组的元素作为单独的参数传入.)
UPDATE1
更多关于"splat"运算符.
小智 20
*items表示该函数接受可变数量的参数.换句话说,如果你这样称呼它:
Order.by_items(item0, item1, item2)
Run Code Online (Sandbox Code Playgroud)
items命名范围内的变量lambda函数将是一个包含3个项目的数组.
要回答你的真实问题,你应该这样称呼它:
Order.by_items(*Item.find(:all, ...))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9830 次 |
| 最近记录: |