2016-09-01 3 views
-2

У меня есть код здесь, который проверяет ввод числа на ноль и плавает:Что делает этот рубиновый код?

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 

Любая помощь здесь? Я был бы признателен, если бы вы могли объяснить это за счет линии!

Извините, новичок здесь!

+1

Ваш вопрос слишком широк. Вам нужно сузить его, сообщив нам, что * точно * вы * не понимаете, что вы * делаете * понимаете, каков ваш уровень знаний и т. Д. В приведенном вами коде используется очень большой процент всех функций Ruby , и совершенно непонятно, о каких из них вы говорите. Вы знаете, что такое объект? Вы знаете, что такое метод? Вы знаете, что такое сообщение? Вы понимаете разницу между методами, процедурами, функциями и другими видами подпрограмм? Вы понимаете динамический ad-hoc-полиморфизм включения? Вы знаете, что такое класс? –

+0

Знаете ли вы, что такое определение метода? Вы знаете, что такое переменная? Вы знаете, что такое аргумент? Вы знаете, что такое параметр? Вы знаете, какова разница и соотношение между аргументом и параметром? Вы знаете, что такое boolean? Вы знаете, насколько правдивость и ложность определены в Ruby? Вы знаете, что такое оператор? Вы знаете, что строка в Ruby? Вы знаете, что такое целое число в Ruby? Вы знаете, что такое float в Ruby? Вы знаете, как синтаксис оператора относится к отправке сообщений? Вы знаете, где найти документацию Ruby? Вы знаете, как читать? –

+0

http://meta.stackoverflow.com/questions/253894/how-to-handle-explain-how-this-code-dump-works-questions/253896#comment17104_253896 –

ответ

1

В тех функциях input преобразуется в число (целое число, используя to_i или поплавок, используя (to_f)), а затем обратно в строку (с to_s). Затем результат этих преобразований сравнивается с входом.

Он проверяет, является ли ввод числом, потому что, если это не так, преобразованная строка будет не равна исходной.

Например:

$ "a".to_i.to_s 
=> "0" 

, потому что to_i возвращает 0, если строка не может быть разобрано на целое число (http://ruby-doc.org/core-2.0.0/String.html).

1

Все, что он делает, это преобразование строки в целое число/float, преобразование ее обратно в строку и сравнение ее со строкой ввода. Если вход был действительным целым числом/float, его преобразованное значение будет идентичным входу. Если, однако, вход не был допустимым числом, отбрасывая его на целое число или float, он превратит его в ноль, который по сравнению с исходным входом будет другим. Вот пример:

irb(main):012:0> "abc".to_i.to_s 
=> "0" 
irb(main):013:0> "123".to_i.to_s 
=> "123" 

Так как вы можете видеть, что нечисловой ввод не прошел проверку.