分组条件运算符的if语句

时间:2019-02-10 03:34:08

标签: ruby if-statement conditional

我有一个代码,我想要一个带有3个条件的if语句。但是,在我的一种情况下,我可以允许或。

例如,if语句为true if( 5 && 6 && (7||9||10||12))。 所以5,6,10是正确的,但5,6,13却不是。

我在ruby中有一个具有类似逻辑的代码,但是它给了我语法错误(可能是因为附加了括号)。但是,我想知道是否允许这种逻辑。

if (constraintsHashed[i][DINING_CONSTRAINTS].downcase.include? userDiningOptions) && (constraintsHashed[i][COST_CONSTRAINTS].downcase.include? userBudget) && 
(((userTime >= Time.parse(TENAM)) && userTime <= Time.parse(NINEPM)) or (userTime >= Time.parse(SEVENAM) && userTime <= Time.parse(TWELVEAM)) or 
(userTime >= Time.parse(SEVENAM)) && (userTime <= Time.parse(FIVEPM)) or (userTime >= Time.parse(NINEAM)) && (userTime <= Time.parse(SIXPM)) or 
(userTime >= Time.parse(TWELVEPM)) && (userTime <= Time.parse(TWELVEAM)) or (userTime >= Time.parse(TENAM)) && (userTime <= Time.parse(ELEVENPM)))

堆栈跟踪:

diningHall.rb:132: syntax error, unexpected keyword_else, expecting ')'
diningHall.rb:134: syntax error, unexpected keyword_end, expecting ')'
                end             #End for if(constraintsHashed
                   ^
diningHall.rb:141: syntax error, unexpected keyword_end, expecting ')'
end                                     #End for def weekendOptions
   ^
diningHall.rb:269: syntax error, unexpected end-of-input, expecting ')'
main()                          #Program starts here
                                                    ^

2 个答案:

答案 0 :(得分:0)

在Ruby中绝对允许使用这种逻辑。括号错误可能是由括号不匹配引起的。为了使调试更容易,我建议您使用内置的Ruby抽象来进行这样的比较。例如,在您的特定情况下,不必使用userTime <= Time.parse(something) && userTime <= Time.parse(somethingElse),而可以使用Time.parse(userTime).between?(Time1, Time2)的内置红宝石方法,其中Time1, Time2是预定义的。这样可以消除括号,使代码更清晰,占用更少的空间,并帮助您更好地调试逻辑。

答案 1 :(得分:0)

已在引起语法错误的情况下添加了额外的括号。 尝试以下条件

      if (constraintsHashed[0][DINING_CONSTRAINTS].downcase.include? userDiningOptions) && 
      (constraintsHashed[0][COST_CONSTRAINTS].downcase.include? userBudget) && 
      ((userTime >= Time.parse(TENAM) && userTime <= Time.parse(NINEPM)) or 
        (userTime >= Time.parse(SEVENAM) && userTime <= Time.parse(TWELVEAM)) or 
        (userTime >= Time.parse(SEVENAM)) && (userTime <= Time.parse(FIVEPM)) or 
        (userTime >= Time.parse(NINEAM)) && (userTime <= Time.parse(SIXPM)) or 
        (userTime >= Time.parse(TWELVEPM)) && (userTime <= Time.parse(TWELVEAM)) or 
        (userTime >= Time.parse(TENAM)) && (userTime <= Time.parse(ELEVENPM)))

希望得到帮助!