检查我的变量是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了解更多详情