如何在 ruby​​ 中将数组作为单个参数传递?

问题描述

我正在考虑一种更优雅的方法,将数组元素作为单个参数传递给方法

到目前为止,我有以下代码

.black {
background-color: black;
}

.white {
background-color: white;
}

这很好用,我知道 splat 操作符做得很好,但我想看看是否可以不使用那个丑陋的星号,而是可以以某种方式重塑 def fetch_data(keywords) Product.where("name ILIKE ? AND type ILIKE ?",*construct_keywords(keywords)) end def construct_keywords(keywords) keywords.map{ |keyword| "%#{keyword}%" } end 的返回值以便 fetch_data 方法将数组元素识别为单独的参数。所以最终我希望它是这样的:

construct_keywords

提前致谢。

解决方法

虽然这可能很方便,但无法直接告知您的返回值将如何使用并“预先设置”。这是被调用的方法必须实现的东西。

您可能想要探索使用基于关键字的占位符,例如 name ILIKE :name,然后您可以在其中创建匹配的哈希。

现在,您将任意数量的 keywords 传递给返回任意大小的结果数组的方法,然后该方法将绑定到精确到两个位置的查询。这似乎很容易失败。

使用 [ :name,:type ].zip(keywords.map { ... }).to_h 可以为您提供一些可以插入其中的东西,当然,假设您有两个关键字参数。

虽然可能需要一些重构,但一个很难弄乱的表单看起来像这样:

def fetch_data(name:,type:)
  Product.where("name ILIKE :name AND type ILIKE :type",name: name,type: type)
end

必须指定那些关键字参数的地方,并且只能有两个。