检查我的变量是Integer还是String
我需要检查我的变量是Integer还是String。 下面的代码将打破循环,而不会警告我非法字符。 任何人都可以帮我找到错误吗?
x = 0 while x == 0 name = gets.chomp.capitalize if name.empty? puts "No input. Try again" elsif name.is_a? Integer puts "Illegal character: Integer " else x = 1 end end
因为gets
返回一个字符串,你需要找出字符串是否代表一个数字(而且只是一个数字)。
首先,将您的字符串转换为带有to_i
的整数。 请注意,对于不包含数字的字符串, to_i
返回0
。 在第二步中,检查将此整数转换回字符串是否与原始字符串匹配
string.to_i.to_s == string
请注意,这只是一个简单的示例,例如字符串00
不起作用。
另一种方法可能是检查字符串是否只包含数字。 这可以通过使用正则表达式来完成:
string.match(/\A\d+\z/)
你可以这样做:
loop do puts "Enter name" name = gets.chomp if name.empty? puts "No input, try again" elsif name.scan(/\d+/).any? puts "Illegal character: Integer" else raise StopIteration end end
情况下,表达
或者使用case-expression来整理。
loop do puts "Enter name" case gets.chomp when '' puts "No input, try again" when /\d/ puts "Illegal character: Integer" else raise StopIteration end end
请参阅String#scan , Array#any? 和StopIteration了解更多详情