救援方法中的投掷错误?

时间:2014-08-25 14:48:25

标签: ruby

我是ruby的新手,学习基础知识,我只想在年龄字段中输入整数值,在执行以下代码时,当它是一个字符串时,需要不输入数字

puts "Enter Age "

age=Integer(gets) rescue nil

if age.is_a?(Numeric)

puts "Your age is #{age}"

else 

puts "Not a Number"

end

if age>25 

puts "You are Permitted"

else 

puts "Not allowed"

end

错误为':未定义的方法`>' for nil:NilClass(NoMethodError)出错了什么?

3 个答案:

答案 0 :(得分:3)

用户输入的格式不是给出整数,因此rescue age成为nil。您尝试在>中对if age>25应用{{1}},但未定义。

答案 1 :(得分:2)

你写了puts "Not a number",它会打印一条消息但是你的程序会像往常一样继续运行。在该行上,尝试将“puts”替换为“raise”,然后阅读有关Ruby异常的内容。

答案 2 :(得分:1)

您不需要rescuenil,因为您计划获取并回复用户输入的任何内容,而您不需要raise,因为您不知道t希望程序在用户输入非整数后退出。

这可能就是你所需要的:

age = ""
loop do
    puts "Enter Age "
    age = gets.chomp
if age.to_i.to_s == age.to_s
    puts "Your age is #{age}"
else 
    puts "Not a Number"
    next
end

if age.to_i > 25 
    puts "You are Permitted"
    break
else 
    puts "Not allowed"
    break
end
end until age.to_i.to_s == age.to_s  

next会让它返回并执行下一个循环,break将突破循环。 您可以使用age.to_i.to_s == age.to_s来真正检查age是否为整数。