测试数字输入是否不是文本 - RUBY

时间:2016-08-19 04:06:12

标签: ruby

我尝试创建一个程序来测试插入的输入是文本还是数字或特殊字符。所以我使用了!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)会更好,但有没有办法让这个工作?

2 个答案:

答案 0 :(得分:2)

这里有几点需要注意。例如,to_i的结果总是一个整数类型值。测试!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语句来清楚说明。

答案 1 :(得分:0)

我认为你也可以用三元组这样做:

def integer?(number)
  number.is_a?(Integer) ? "This is a number" : "This is not a number"
end