クラスメソッド練習問題

クラスメソッドの練習問題。アルコールの分解速度はその人がもつ酵素の構成で遺伝的に決まっており、二日酔いにならない飲酒量というのは人それぞれで決まっている。問題は、世の中にはいろんな種類のお酒があって、いわゆる「チャンポン」な飲み方をすると分量を誤って翌朝つらい思いをするということだ。この二日酔い問題をRubyで解決する。

class Alcohol

  @@amount = 0

  def initialize(percent)
    @p = percent * 0.01
  end

  def drink(ml)
    @@amount = @@amount + (ml * @p)
  end

  def Alcohol.amount
    @@amount
  end

end

class MyAlcohol < Alcohol

  LIMIT = 150  # ml

  def Alcohol.limit?
    @@amount > LIMIT
  end
  
end

beer = MyAlcohol.new(5.5)      # 最近のビールって5.5%とかふつうだし
wine = MyAlcohol.new(14)

beer.drink(500)              # 500ml缶ビール
4.times {wine.drink(180)}    # グラスに4杯のワイン

puts MyAlcohol.amount                  # トータルの摂取エチルアルコール量
puts "飲みすぎー!" if MyAlcohol.limit?   # 二日酔い臨界点を超えたか?

あら、うまく動いているけど、クラス変数の継承ってどうなってるんだっけか。継承してるっぽい。うーん、GLASS=180とかBIGCAN=500とかといった定数を定義して、使いたい。というときはModuleにするのかな?