我需要检查我的变量是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
答案 0 :(得分:3)
因为gets
返回一个字符串,你需要找出字符串是否代表一个数字(而且只是一个数字)。
首先,将您的字符串转换为to_i
的整数。请注意,对于不包含数字的字符串,to_i
会返回0
。在第二步中,检查将此整数转换回字符串是否与原始字符串匹配
string.to_i.to_s == string
请注意,这只是一个简单的示例,例如字符串00
无效。
另一种方法可能是检查字符串是否只包含数字。这可以通过使用正则表达式来完成:
string.match(/\A\d+\z/)
答案 1 :(得分:1)
您可以这样做:
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