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