Ruby 检查我的变量是整数还是字符串

Ruby 检查我的变量是整数还是字符串,ruby,Ruby,我需要检查我的变量是整数还是字符串。 下面的代码只会中断循环,不会警告我非法字符。谁能帮我找出错误吗 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

我需要检查我的变量是整数还是字符串。 下面的代码只会中断循环,不会警告我非法字符。谁能帮我找出错误吗

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 

您可以这样做:

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表达式来整理东西

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

请参阅,有关详细信息,您可以执行以下操作:

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表达式来整理东西

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

有关更多详细信息,请参见和,因为
获取
返回一个字符串,您需要确定该字符串是否表示一个数字(并且仅表示一个数字)

首先,使用
to_i
将字符串转换为整数。请注意,对于不包含数字的字符串,
to_i
返回
0
。在第二步中,检查将此整数转换回字符串是否与原始字符串匹配

 string.to_i.to_s == string
请注意,这只是一个简单的示例,它不适用于字符串
00

另一种方法可能是检查字符串是否只包含数字。这可以通过使用regexp实现:

string.match(/\A\d+\z/)

因为
gets
返回一个字符串,您需要确定该字符串是否表示一个数字(并且仅表示一个数字)

首先,使用
to_i
将字符串转换为整数。请注意,对于不包含数字的字符串,
to_i
返回
0
。在第二步中,检查将此整数转换回字符串是否与原始字符串匹配

 string.to_i.to_s == string
请注意,这只是一个简单的示例,它不适用于字符串
00

另一种方法可能是检查字符串是否只包含数字。这可以通过使用regexp实现:

string.match(/\A\d+\z/)

可能重复的字符串是否希望字符串完全没有数字?像“asdfg09qwerty”这样的字符串对您是否有效?
elsif name.is_A?整数
将始终返回
false
,因为
name
是字符串。:-)可能重复的字符串是否希望字符串完全没有数字?像“asdfg09qwerty”这样的字符串对您是否有效?
elsif name.is_A?整数
将始终返回
false
,因为
name
是字符串。:-)<代码>匹配优于
扫描
。请看斯皮克曼的回答。这两个帐户是怎么回事?:)@塞尔吉奥图兰采夫:我想其中一个应该保持匿名,另一个更“公开”我的真实姓名。我从未真正使用过我的匿名用户名,直到几天前我想我会尝试使用一个新的用户名iceツ. 这当然不是出于任何非法原因(0票)。无论如何,我认为最好保留这两个帐户,并在合并的过程中,但现在将保留这个用户名:)哦,不,我不是在暗示你有任何可疑的行为。只是好奇:)
match
scan
更可取。请看斯皮克曼的回答。这两个帐户是怎么回事?:)@塞尔吉奥图兰采夫:我想其中一个应该保持匿名,另一个更“公开”我的真实姓名。我从未真正使用过我的匿名用户名,直到几天前我想我会尝试使用一个新的用户名iceツ. 这当然不是出于任何非法原因(0票)。无论如何,我认为最好保留这两个帐户,并在合并的过程中,但现在将保留这个用户名:)哦,不,我不是在暗示你有任何可疑的行为。只是好奇:)