我想强制用户只从控制台输入数值.下面是我应该做的那段代码.
puts "Enter numeric value: "
result = gets.chomp
if result.to_i.is_a? Numeric
puts "Valid input"
else
puts "Invalid input."
end
Run Code Online (Sandbox Code Playgroud)
Valid input即使输入字符串值,它也会打印出来.原因是每个字符串在Ruby中都有一些等价的数值.有人可以帮助我正确修复条件,以便当用户输入非数字值时,脚本会提示Invalid input.吗?
to_i 将任何字符串转换为整数,即使它不应该:
"asdf".to_i
Run Code Online (Sandbox Code Playgroud)
返回0.
你想要做的是:
puts "Enter numeric value: "
result = gets.chomp
begin
result = Integer(result)
puts "Valid input"
rescue ArgumentError, TypeError
puts "Invalid input."
# handle error, maybe call `exit`?
end
Run Code Online (Sandbox Code Playgroud)
Integer(some_nonnumeric_string)如果字符串不能转换为整数,则抛出异常,而String#to_i在这些情况下给出0,这就是为什么result.to_i.is_a? Numeric总是如此.
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |