1

My code is

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

if @site.name = "B.A.P" is working fine but for others two it's not working properly. I also used one more syntax which is:

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

Again facing the same problem. Can any one suggest me proper way to implement logical `or operator with if condition?

4

3 回答 3

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"

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

于 2012-08-16T10:51:38.170 回答
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(大写很重要)。

于 2012-08-16T10:53:57.370 回答
0

您的代码使问题变得模棱两可。

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

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

我会用那个。

于 2012-08-16T11:50:53.147 回答