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