我有一个代码,我想要一个带有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
^
答案 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)))
希望得到帮助!