我这里有一个很长的代码,w/c 是 begin-end block 和 if 语句的组合。如何在 all if 语句中简化此操作?
print "Put a number between 0 to 100: "
begin
numb = gets.chomp
numb = Integer(numb)
rescue
print "Please put a number not a text: "
retry
end
if numb < 0
puts "You can't enter a negative number!"
elsif numb <= 50
puts "#{numb} is between 0 and 50"
elsif numb <= 100
puts "#{numb} is between 51 and 100"
else
puts "#{numb} is above 100"
end
重构
最佳答案
指定要救援的异常类是一个很好的做法。在这种情况下,它是一个 ArgumentError。
此外,您的代码看起来没问题。 读取输入可以抽象为一个方法:
def read_input
Integer(gets.chomp)
rescue ArgumentError
print "Please put a number not a text: "
retry
end
在代码的第二部分中,唯一的问题是 puts
可以移到 if
前面,以避免在每个中键入 puts
案例。
print "Put a number between 0 to 100: "
numb = read_input
puts if numb < 0
"You can't enter a negative number!"
elsif numb <= 50
"#{numb} is between 0 and 50"
elsif numb <= 100
"#{numb} is between 51 and 100"
else
"#{numb} is above 100"
end
这部分代码也可以用范围和 case
语句来表达,这可以说更具可读性:
puts case numb
when -Float::INFINITY...0 then "You can't enter a negative number!"
when 0..50 then "#{numb} is between 0 and 50"
when 51..100 then "#{numb} is between 51 and 100"
else "#{numb} is above 100"
end
此外,-Float::INFINITY...0
语句可以用 proc(&:negative?)
来表示。 Numeric#positive?
和 Numeric#negative?
方法在 Ruby sice 2.3 版本中可用。
关于ruby - 简化 Ruby 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39036138/