我有一个数组
address = ["kuwait", "jordan", "United Arab Emirates", "Bahrain"]
location = "india"
order.country = "jordan"
address.include? (location || order.country) #=> false
我的OR
条件无效。请指导我错的地方。
答案 0 :(得分:11)
为什么您的代码无效
以下代码行
address.include? (location || order.country)
首先评估location || order.country
,根据您的示例生成"india"
。然后检查它是否存在于地址数组中,基本上是它:
address.include? "india"
这是false
,因此您得到false result.
同样如果你尝试:
address.include? (order.country || location)
在检查true
时会返回address.include? "jordan"
。因此,这不是实现目标的正确方法。
在此示例中使用Array#include
的正确方法是什么?
address.include?(location) || address.include?(order.country)
答案 1 :(得分:6)
有很多方法可以实现此功能:
!(address & [location, order.country]).empty?
(address & [location, order.country]).any?
[location, order.country].any? { |addr| address.include? addr }
您的代码失败,因为location || order.country
已评估为truthy
(在此特定情况下调用||
的第一个参数,因为"india"
为truthy
。 )虽然你希望它被视为“数组包括这个或数组包含那个”,但它实际上是“数组包含'this或that'的结果,对于给出的例子来说显然是"india"
。” / p>
答案 2 :(得分:0)
这是另一种方式:
address = ["kuwait", "jordan", "United Arab Emirates", "Bahrain"]
to_check = ["india", "jordan"]
p present = (to_check - address).size < to_check.size
#=> true