gpt4 book ai didi

ruby-on-rails - 在named_scope 参数列表中变量前的星号是什么意思?

转载 作者:行者123 更新时间:2023-12-03 12:16:02 29 4
gpt4 key购买 nike

我有一个像这样的命名范围:

named_scope :by_items, lambda |*items| {
:joins => :items,
:conditions => ["items.id in (?)", items.map(&::id)]
}

什么是 *item意思?当我用 Item.find(:first, ...) 调用它时它工作正常。如果我尝试使用集合调用, Item.find(:all, ...)它失败。

从一个不同的 SO 问题,我知道签名应该是:
Order.by_items(item0, item1, ...)

所以,我的问题真的是,如何将 Array 转换为逗号分隔的参数列表?

更新0

来自 Martin Fowler我学过:

(Using a "*" in the argument list helps in working with variable arguments in ruby. In the argument list *disks indicates a vararg. I can then refer to all the disks passed in as an array named "disks". If I call another function with "*disks" the elements of the disks array are passed in as separate arguments.)



更新 1

更多关于 the "splat" operator .

最佳答案

*items意味着该函数接受可变数量的参数。换句话说,如果你这样称呼它:

Order.by_items(item0, item1, item2)

变量 items在命名范围 lambda 函数内将是一个包含 3 个项目的数组。

要回答你真正的问题,你应该这样称呼它:
Order.by_items(*Item.find(:all, ...))

关于ruby-on-rails - 在named_scope 参数列表中变量前的星号是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711171/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com