If-операторы с сгруппированными условными операторами - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть код, в котором я хочу выполнить оператор if с 3 выполненными условиями.Тем не менее, в одном из моих условий я могу разрешить либо.

Например, оператор 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 голосов
/ 11 февраля 2019

Вы добавили дополнительные скобки в условие, которое вызывает синтаксическую ошибку.Попробуйте следующее условие

      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)))

Надеюсь, что это поможет !!

0 голосов
/ 10 февраля 2019

Логика такого рода определенно разрешена в Ruby.Ошибка в скобках, вероятно, вызвана несоответствием скобок.Чтобы облегчить отладку, я бы посоветовал вам использовать встроенные абстракции Ruby для обработки подобных сравнений.Например, в вашем конкретном случае вместо использования userTime <= Time.parse(something) && userTime <= Time.parse(somethingElse) вы можете использовать встроенный метод ruby ​​Time.parse(userTime).between?(Time1, Time2), где Time1, Time2 предопределено.Это устранит скобки, сделает код более понятным, займет меньше места и поможет лучше отладить логику.

...