Ruby - 在一行中使用多个条件
Ruby - Using multiple conditions on a single line
所以,我 运行 遇到了这个问题,我想在例程继续之前检查三个条件,但它不断抛出语法错误,说它没有预料到多个条件。现在,我知道我已经看到其他人使用以下行:
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)
...
认为您只是缺少一些括号 - 试试这个:
if (letters.eql?(letters.upcase) && dash.eql?('-') && numbers.to_i.to_s.eql?(numbers))
应该这样做:
if letters.eql?(letters.upcase) && dash.eql?('-') && numbers.to_i.to_s.eql?(numbers)
如果您愿意,您仍然可以将整个条件句括在括号中,但是使用 Ruby(与 JavaScript 不同),您不需要。
这也有效:
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 之前提到过优先级。
除了其他答案 - 考虑使用 regular expression 检查格式:
print "Enter license plate: "
input = gets.chomp
if input.length != 8
puts "All valid license plates are 8 characters long."
elsif input !~ /^[A-Z]{3}-\d{4}$/
print "All valid license plates are three (3) uppercase letters, followed by a dash (-), followed by four (4) digits"
else
puts "#{input} is a valid license plate."
end
所以,我 运行 遇到了这个问题,我想在例程继续之前检查三个条件,但它不断抛出语法错误,说它没有预料到多个条件。现在,我知道我已经看到其他人使用以下行:
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)
...
认为您只是缺少一些括号 - 试试这个:
if (letters.eql?(letters.upcase) && dash.eql?('-') && numbers.to_i.to_s.eql?(numbers))
应该这样做:
if letters.eql?(letters.upcase) && dash.eql?('-') && numbers.to_i.to_s.eql?(numbers)
如果您愿意,您仍然可以将整个条件句括在括号中,但是使用 Ruby(与 JavaScript 不同),您不需要。
这也有效:
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 之前提到过优先级。
除了其他答案 - 考虑使用 regular expression 检查格式:
print "Enter license plate: "
input = gets.chomp
if input.length != 8
puts "All valid license plates are 8 characters long."
elsif input !~ /^[A-Z]{3}-\d{4}$/
print "All valid license plates are three (3) uppercase letters, followed by a dash (-), followed by four (4) digits"
else
puts "#{input} is a valid license plate."
end