Использование Ruby Begin и End Block - PullRequest
0 голосов
/ 11 сентября 2018

Я написал логику для поиска «проблемы с бутылкой»

  module Bottle
      class Operation
        def input
          puts 'Enter the number of bottles:'
          num = gets.chomp.to_i
          bottle_operation(num)
        end

        def bottle_operation(num)
          while (num < 10) && (num > 0)
            puts "#{num} bottles"
            num -= 1
            puts "One bottle open. #{num} bottles yet to be opened."
          end
      end
     end
     begin
       res = Operation.new
       res.input
     end
    end

Меня попросили использовать блок «Начало и конец» вне модуля, так как это неправильный способ использования.При этом я получил следующую ошибку

module Bottle
  class Operation
    def input
      puts 'Enter the number of bottles:'
      num = gets.chomp.to_i
      bottle_operation(num)
    end

    def bottle_operation(num)
      while (num < 10) && (num > 0)
        puts "#{num} bottles"
        num -= 1
        puts "One bottle open. #{num} bottles yet to be opened."
      end
  end
 end
end

begin
   res = Operation.new
   res.input
 end

ОШИБКА `

': неинициализированная константа Operation (NameError)

Как правильно использовать началои конец блока?как и где использовать

1 Ответ

0 голосов
/ 11 сентября 2018

Как правильно использовать начальный и конечный блоки?как и где использовать

Обычно вы вообще не используете begin / end.

Ошибка в вашем коде заключается в том, что за пределами module,имя класса должно быть полностью квалифицированным.Тем не менее, следующее решит проблему:

- res = Operation.new
+ res = Bottle::Operation.new

begin / end может потребоваться, когда:

  • вам нужен блок для выполненияв пределах while / until (кредиты @Stefan);
  • вы хотите rescue исключение;
  • вы хотите иметь ensure блок.

Подведение итогов:

begin
  puts "[begin]"
  raise "from [begin]"
rescue StandardError => e
  puts "[rescue]"
  puts e.message
ensure
  puts "[ensure]"
end

#⇒ [begin]
#  [rescue]
#  from [begin]
#  [ensure]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...