检查答案是否为空

时间:2018-06-03 16:46:07

标签: ruby

我想为用户创建一个循环,直到他给我一个数字。但我不知道检查它是数字还是字符串的正确方法。 这样的事情。

puts "Enter your age."
age = gets.chomp.to_i
while age.empty?
    age = gets.chomp.to_i
end 

空方法会导致错误。

3 个答案:

答案 0 :(得分:3)

使用以下代码:

cssSelector("select[title=\"Sort By\"]")

答案 1 :(得分:2)

带有关键字const regex = /messageid=(\d+)/g const messageId = regex.exec(body)[1]

Kernel#loop通常用于此类任务。

break

如果输入r = / \A # match beginning of string [1-9] # match a digit greater than zero \d* # match zero or more digits $ # match end of line /x # free-spacing regex definition mode loop do print "Enter your age: " age = gets[r] break age.to_i unless age.nil? end ,则终端中的行显示如下:

"34\n"

Kernel#print。如果使用Kernel#puts,则会显示以下内容。

Enter your age: 34

请注意,第一个锚点(Enter your age: 34 )匹配字符串的开头,而第二个锚点(\A)匹配行的结尾。 (混合字符串和行锚的开头和结尾是不寻常的。)可以改为写$,其中age = gets.chomp[/\A\d+\z/]匹配字符串的结尾。

答案 2 :(得分:1)

如果您需要过滤负整数,您可以检查输入是否仅包含数字。例如:

age = nil
loop do
  puts "Enter your age: "
  age = gets.chomp
  break if (age.scan(/\D/).empty? & !age.empty?)
end
puts "Your age is #{age}"

age = nil需要初始化变量并在循环外部使用。或者需要使用@age

.scan(/\D/)生成一个数组,其中包含字符串的每个单个字符,而不是数字\D。因此,如果数组为空,则表示该字符串仅由数字组成。例如:

p "my age is 30".scan(/\D/) #=> ["m", "y", " ", "a", "g", "e", " ", "i", "s", " "]
p "30".scan(/\D/) #=> []