被红宝石或{||抓住了运算符if条件

时间:2012-08-16 10:29:20

标签: ruby

我的代码是

if @site.Name != ("B.A.P." || "Cir." || "10th")
  do this if part
else
  do this else part
end

if @site.name = "B.A.P"工作正常,但对于其他两个,它无法正常工作。我还使用了另外一种语法:

if ["B.A.P." , "Cir." , "10th"].include? (@site.Name)

再次面临同样的问题。任何人都可以建议我用if条件实现逻辑`或运算符的正确方法吗?

3 个答案:

答案 0 :(得分:2)

您的第二个版本应该可以使用

1.9.3p194 :027 > ["B.A.P." , "Cir." , "10th"].include? "Cir."
 => true 
1.9.3p194 :028 > ["B.A.P." , "Cir." , "10th"].include? "10th"
 => true 
1.9.3p194 :029 > ["B.A.P." , "Cir." , "10th"].include? "B.A.P."
 => true 

检查@ site.Name

中是否有任何终结符等

在你的第一个版本中,这就是发生的事情

1.9.3p194 :033 > ("B.A.P." || "Cir." || "10th")
 => "B.A.P." # always evaluates to first arg

对于第一版,请使用此

if @site.Name == "B.A.P." || @site.Name == "Cir." || @site.Name == "10th"

或以更红宝石的方式

@site.Name.eql? "B.A.P." or @site.Name.eql? "Cir." or @site.Name.eql? "10th"

我将使用数组包含版本。 :)

答案 1 :(得分:1)

第一个版本的工作方式与您说英语的方式相同,但大多数编程语言的工作方式并非如此。相反,你必须这样做:

if @site.Name != "B.A.P." && @site.Name != "Cir." && @site.Name != "10th"

如果您正在测试以查看@site.Name 是否等于其中一个,这是您的第二个版本的样子,那么您可以这样做:

if @site.Name == "B.A.P." || @site.Name == "Cir." || @site.Name == "10th"

我更喜欢你的第二个版本,这完全有效。 (再次假设您的条件是@site.Name 等于这三个值中的一个。)如果它不适合您,那么您的意思可能就是@site.name而不是@site.Name(大写问题)。

答案 2 :(得分:0)

你的代码片段使问题变得模棱两可。

在第一部分中,您使用了!=。所以,如果你想看看@site.Name 是否“B.A.P.”,“Cir。”。或“第10”,第二部分必须是否定形式,即:

unless ["B.A.P." , "Cir." , "10th"].include? (@site.Name)

我会用它。