Ruby代码跳过程序的某一部分

Ruby代码跳过程序的某一部分,ruby,Ruby,我试图运行一个计算器程序,但由于某种原因,它跳过了部分代码。以下是我的全部ruby代码: # require yaml file require 'yaml' MESSAGES = YAML.load_file('calculator_messages.yml') LANGUAGE = 'en' def messages(message, lang='en') MESSAGES[lang][message] end def prompt(key) message = messag

我试图运行一个计算器程序,但由于某种原因,它跳过了部分代码。以下是我的全部ruby代码:

# require yaml file

require 'yaml'
MESSAGES = YAML.load_file('calculator_messages.yml')

LANGUAGE = 'en'

def messages(message, lang='en')
  MESSAGES[lang][message]
end

def prompt(key)
  message = messages(key, LANGUAGE)  # make sure the "messages" method is declared above this line
  Kernel.puts("=> #{message}")
end

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

def operation_to_message(op)
  word = case op
         when '1'
           'Adding'
         when '2'
           'Subtracting'
         when '3'
           'Multiplying'
         when '4'
           'Dividing'
         end
  word
end

prompt('welcome')

name = ''
loop do
  name = Kernel.gets().chomp()

  if name.empty?()
    prompt('valid_name')
  else
    break
  end
end

prompt("Hi #{name}!")

loop do # main loop
  number1 = ''
  loop do
    prompt('first_number')
    number1 = Kernel.gets().chomp()

    if valid_number?(number1)
      break
    else
      prompt('not_a_valid_number')
    end
  end

  number2 = ''
  loop do
    prompt('second_number')
    number2 = Kernel.gets().chomp()

    if valid_number?(number2)
      break
    else
      prompt('not_a_valid_number')
    end
  end

  operator_prompt = <<-MSG
  What operation would you like to perform?
  1) add
  2) subtract
  3) multiply
  4) divide
  MSG

  prompt(operator_prompt)

  operator = ''
  loop do
    operator = Kernel.gets().chomp()
    if %w(1 2 3 4).include?(operator)
      break
    else
      prompt('choose_number_range')
    end
  end

  prompt("#{operation_to_message(operator)} the two numbers")

  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}")
  prompt('next_step')
  answer = Kernel.gets().chomp()
  break unless answer.downcase().start_with?('y')
end

prompt('goodbye_msg')
三,。最后是在结果变量中打印实际答案的部分

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}")

你知道它为什么跳过这些代码吗

问题:据我所知,您的
提示信息试图翻译,但可能找不到翻译,例如“嗨,Felix”

您可以通过更改
消息
功能快速检查此理论:

def messages(message, lang='en')
  MESSAGES[lang][message] || "NO TRANSLATION FOUND"
end
并再次观察输出

更新 OP证实了这一理论,并在评论中要求“解决方案”,最便宜的可能是:

def messages(message, lang='en')
  # Look up translation, default to untranslated message.
  MESSAGES[lang][message] || message
end

哪一部分被准确地跳过了它被写在顶部1,2,3“没有找到翻译”出现在上面。怎么解决这个问题?
def messages(message, lang='en')
  # Look up translation, default to untranslated message.
  MESSAGES[lang][message] || message
end