Ruby开始和结束块用法

时间:2018-09-11 05:53:46

标签: ruby

我已经写了找到“瓶子问题”的逻辑

  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

由于不正确的使用方式,我被要求在模块外使用Begin和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
  

错误`

':未初始化的常量操作(NameError)

使用开始和结束块的正确方法是什么?使用方式和地点

1 个答案:

答案 0 :(得分:3)

  

使用开始和结束块的正确方法是什么?使用方式和地点

通常您根本不使用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]