ちなみに

火曜日の空は僕を押しつぶした。

Ruby/Rails勉強会@関西 #27 演習編

http://jp.rubyist.net/?KansaiWorkshop27

行ってきましたRuby勉強会。5回目。(テンプレート化)

取り急ぎ、初級者レッスンの演習のみ。
コマンドライン引数からスマートに目的のクラスのインスタンスを作る方法が思いつかずに、evalとmathod_missing初体験。
使い方があっているのか良く分かってません。(おかしな事をしていたら突っ込んでほしいです

class Object
  # FIXME: method_missingはじめて使ったので正しいかわからない
  # 例外を投げる方がいいのかな
  def method_missing(name, *argv)
    puts 'must not happen'
    exit
  end
end

class Shain
  attr_writer :salary

  def standup
    '立ちました'
  end

  def bounus
    @salary * 4
  end
end

class Tanto < Shain
  def standup
     '担当は普通に' + super
  end

  def kyuryo
    @salary
  end
end

class Shunin < Shain
  def standup
    '主任がすばやく' + super
  end

  def kyuryo
    @salary * 2
  end
end

class Butyo < Shain
  def standup
     '部長はだるそうに' + super
  end

  def kyuryo
    @salary * 3
  end
end

class Torishimari < Shain
  def standup
    '取締役はふんぞりがえって' + super
  end

  def kyuryo
    @salary * 4
  end
end

if $0 == __FILE__ && ARGV.size == 2
  class_name = ARGV.shift
  shain = eval "#{class_name}.new"

  puts shain.standup
  shain.salary = ARGV.shift.to_i
  puts "私の給料は$#{shain.kyuryo}です\n"     # 今気づいたけど\nいらない。
  puts "私のボーナスは$#{shain.bounus}です\n" # perlばっかり書いてたから副作用が><
else
  puts "Usage: #{File.basename $0} position base-salary"
end