这个ruby代码做了什么?

时间:2016-09-01 11:03:29

标签: ruby

我这里有代码验证零和浮点数的输入:

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

这里有什么帮助吗?如果你能逐行解释,我将不胜感激!

抱歉新手在这里!

2 个答案:

答案 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"

因此,您可以看到非数字输入将无法通过检查。