[英]Test if the number input is not a text - RUBY
我试图创建一个程序来测试插入的输入是否为文本,数字或特殊字符。 所以我用!a.is_a? Integer
!a.is_a? Integer
。 但是我的代码似乎不起作用。 我收到此错误:
语法错误,意外的TCONSTANT。 然后期望关键字,
这是我的代码:
print "Enter Number Please: "
a = gets.chomp.to_i
answer = case a
when 3
"OUTPUT: a is 3"
when 4
"OUTPUT: a is 4"
when !a.is_a? Integer
"You did not enter a number."
else
"OUTPUT: a is neither 3, nor 4"
end
puts answer
我知道尝试使用Integer(obj)可能会更好,但是有没有办法做到这一点?
这里有几件事要注意。 首先, to_i
的结果始终是整数类型值。 测试!a.is_a? Integer
!a.is_a? Integer
是多余的,因为它永远不会失败。
您还需要记住, case
语句本身使得与类进行比较非常容易:
case (a)
when Integer
puts "I'm a number!"
when String
puts "I'm a string!"
end
请注意,任何整数值都会自动触发第一个条件。
即使when
子句相当慷慨,您也可以对其进行限制。 为了使解析器正确解释您的要求,您必须像这样表达它:
when !a.is_a?(Integer)
尽管如前所述,这可以减少到when Integer
所以其余的都是多余的。
您还希望避免在case
部分中指定某些内容,然后再引用变量。 这会使任何阅读您的代码的人感到困惑,并且可能是不必要的。 如果您要处理复杂的逻辑,请使用一系列的if
语句使事情变得清楚。
我认为您也可以使用三进制来做到这一点,就像这样:
def integer?(number)
number.is_a?(Integer) ? "This is a number" : "This is not a number"
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.