我的代码是
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条件实现逻辑`或运算符的正确方法吗?
答案 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)
我会用它。