Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在将多个用户输入保存为变量之前,检查它们是否满足特定条件_Ruby_Variables_Conditional Statements_User Input_Rescue - Fatal编程技术网

Ruby 在将多个用户输入保存为变量之前,检查它们是否满足特定条件

Ruby 在将多个用户输入保存为变量之前,检查它们是否满足特定条件,ruby,variables,conditional-statements,user-input,rescue,Ruby,Variables,Conditional Statements,User Input,Rescue,有没有办法将这两块代码组合起来,以减少冗余 puts "first number?" num1 = gets.chomp.to_i until num1.is_a?(Integer) puts "please enter an actual number" num1 = Integer(gets.chomp) rescue nil end puts "second number?" num2 = gets.chomp.to_i

有没有办法将这两块代码组合起来,以减少冗余

puts "first number?"
num1 = gets.chomp.to_i
until num1.is_a?(Integer)
  puts "please enter an actual number"
  num1 = Integer(gets.chomp) rescue nil
end

puts "second number?"
num2 = gets.chomp.to_i
until num2.is_a?(Integer)
  puts "please enter an actual number"
  num2 = Integer(gets.chomp) rescue nil
end

你可以这样做

def get_int(msg)
  puts msg
  loop do
    n = Integer(gets, exception: false)
    break n if n
    puts "please enter an actual number"
  end
end
first number?
cat
please enter an actual number
72.1
please enter an actual number
16
second number?
&dog
please enter an actual number
10/2
please enter an actual number
-4
获取
num1
值的对话框如下所示

def get_int(msg)
  puts msg
  loop do
    n = Integer(gets, exception: false)
    break n if n
    puts "please enter an actual number"
  end
end
first number?
cat
please enter an actual number
72.1
please enter an actual number
16
second number?
&dog
please enter an actual number
10/2
please enter an actual number
-4
获取
num2
值的对话框如下所示

def get_int(msg)
  puts msg
  loop do
    n = Integer(gets, exception: false)
    break n if n
    puts "please enter an actual number"
  end
end
first number?
cat
please enter an actual number
72.1
please enter an actual number
16
second number?
&dog
please enter an actual number
10/2
please enter an actual number
-4
见和<在Ruby v2.6中,code>Kernel#Integer被赋予了可选参数
exception:false


使用
循环
的一个优点是它提供了一定程度的数据封装。与
while
until
不同,
loop
获取一个块,从而避免窥视块内定义的局部变量的值。除了
循环
之外,我很少使用任何东西来进行循环

def get_int(msg)
  puts msg
  loop do
    n = Integer(gets, exception: false)
    break n if n
    puts "please enter an actual number"
  end
end
first number?
cat
please enter an actual number
72.1
please enter an actual number
16
second number?
&dog
please enter an actual number
10/2
please enter an actual number
-4
获取
num1
值的对话框如下所示

def get_int(msg)
  puts msg
  loop do
    n = Integer(gets, exception: false)
    break n if n
    puts "please enter an actual number"
  end
end
first number?
cat
please enter an actual number
72.1
please enter an actual number
16
second number?
&dog
please enter an actual number
10/2
please enter an actual number
-4
获取
num2
值的对话框如下所示

def get_int(msg)
  puts msg
  loop do
    n = Integer(gets, exception: false)
    break n if n
    puts "please enter an actual number"
  end
end
first number?
cat
please enter an actual number
72.1
please enter an actual number
16
second number?
&dog
please enter an actual number
10/2
please enter an actual number
-4
见和<在Ruby v2.6中,code>Kernel#Integer被赋予了可选参数
exception:false

使用
循环
的一个优点是它提供了一定程度的数据封装。与
while
until
不同,
loop
获取一个块,从而避免窥视块内定义的局部变量的值。除了
循环
之外,我很少使用任何东西进行循环