我这里有代码验证零和浮点数的输入:
def integer?(input)
input.to_i.to_s == input
end
def float?(input)
input.to_f.to_s == input
end
def valid_number?(input)
integer?(input) || float?(input)
end
loop do # main loop
number1 = ''
loop do
prompt(messages('first_number', LANGUAGE))
number1 = Kernel.gets().chomp()
if valid_number?(number1)
break
else
prompt(messages('not_a_valid_number', LANGUAGE))
end
end
number2 = ''
loop do
prompt(messages('second_number', LANGUAGE))
number2 = Kernel.gets().chomp()
if valid_number?(number2)
break
else
prompt(messages('not_a_valid_number', LANGUAGE))
end
end
end
result = case operator
when '1'
number1.to_i() + number2.to_i()
when '2'
number1.to_i() - number2.to_i()
when '3'
number1.to_i() * number2.to_i()
else
number1.to_f() / number2.to_f()
end
prompt("The answer is: #{result}")
这个代码在外行人的术语或假人可以理解的解释中做了什么?
def integer?(input)
input.to_i.to_s == input
end
def float?(input)
input.to_f.to_s == input
end
def valid_number?(input)
integer?(input) || float?(input)
end
这里有什么帮助吗?如果你能逐行解释,我将不胜感激!
抱歉新手在这里!
答案 0 :(得分:1)
在这些函数中,input
转换为数字(使用to_i
的整数或使用(to_f
)浮动)然后返回字符串(使用to_s
)。然后将这些转换的结果与输入进行比较。
它验证输入是否为数字,因为如果不是,则转换后的字符串将不等于原始字符串。
例如:
$ "a".to_i.to_s
=> "0"
因为如果无法将字符串解析为整数(http://ruby-doc.org/core-2.0.0/String.html),to_i
将返回0。
答案 1 :(得分:1)
它所做的就是将字符串转换为整数/浮点数,将其转换回字符串并将其与输入字符串进行比较。如果输入是有效的整数/浮点数,则其转换后的值将与输入相同。但是,如果输入不是有效数字,则将其转换为整数或浮点数会将其转换为零,与原始输入相比,它将不同。这是一个例子:
irb(main):012:0> "abc".to_i.to_s
=> "0"
irb(main):013:0> "123".to_i.to_s
=> "123"
因此,您可以看到非数字输入将无法通过检查。