Ruby - 在一行中使用多个条件

时间:2015-12-14 21:03:32

标签: ruby if-statement conditional-statements multiple-conditions

所以,我遇到了这个问题,我希望在例程继续之前检查三个条件,但它不断抛出语法错误,说它不期望多个条件。现在,我知道我见过其他人使用如下行:

if x > 100 && x % 2 == 1
    #Do something
end

但是,无论出于何种原因,这一行:

if (letters.eql? letters.upcase && dash.eql? '-' && numbers.to_i.to_s.eql? numbers)

引发了大量错误。这与“.eql”有关吗?还是我还没有遇到过与Ruby无关的东西?

以下是其余代码供参考:

print "Enter license plate: ";
input = gets.strip;
if input.length == 8
    letters = input[0,2];
    dash = input[3];
    numbers = input[4,7];
    if (letters.eql? letters.upcase && dash.eql? '-' && numbers.to_i.to_s.eql? numbers)
        puts "#{input} is a valid license plate."
    else
        print "All valid license plates are three (3) uppercase letters, followed by a dash (-), followed by four (4) digits";
    end
else
    print "All valid license plates are 8 characters long.";
end

另外,这些是错误:

LicensePlate.rb:7: syntax error, unexpected tSTRING_BEG, expecting ')'
...? letters.upcase && dash.eql? '-' && numbers.to_i.to_s.eql? ...
...                               ^
LicensePlate.rb:7: syntax error, unexpected tIDENTIFIER, expecting ')'
... numbers.to_i.to_s.eql? numbers)
...

4 个答案:

答案 0 :(得分:5)

认为你只是错过了一些问题 - 试试这个:

if (letters.eql?(letters.upcase) && dash.eql?('-') && numbers.to_i.to_s.eql?(numbers))

答案 1 :(得分:5)

这应该这样做:

!!6 === true

如果您愿意,您仍然可以将整个条件包装在括号中,但是使用Ruby(与JavaScript不同),您不需要。

答案 2 :(得分:3)

这也有效:

letters.eql? letters.upcase and dash.eql? '-' and numbers.to_i.to_s.eql? numbers

我认为这是由于运营商的优先级,因为这也有效:

(letters.eql? letters.upcase) && (dash.eql? '-') && (numbers.to_i.to_s.eql? numbers)

Ruby似乎试图过早地评估你的病情。

编辑:刚看到Lurker之前提到过优先权。

答案 3 :(得分:1)

除了其他答案外 - 请考虑使用regular expression检查格式:

.hgtags