我是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)出错了什么?
答案 0 :(得分:3)
用户输入的格式不是给出整数,因此rescue
age
成为nil
。您尝试在>
中对if age>25
应用{{1}},但未定义。
答案 1 :(得分:2)
你写了puts "Not a number"
,它会打印一条消息但是你的程序会像往常一样继续运行。在该行上,尝试将“puts”替换为“raise”,然后阅读有关Ruby异常的内容。
答案 2 :(得分:1)
您不需要rescue
到nil
,因为您计划获取并回复用户输入的任何内容,而您不需要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
是否为整数。