先の ruby 電卓を見返すと、 「なんだ、他のスクリプトとあんまし変わらないじゃん(^-^)」 と感想もたれたと思います。 先に AWK や Perl のスクリプトがあり、そこから逆に作ったものですから。 逆にいえば、ruby の特徴があまりないようなサンプルでした。 違いといえば、演算子が後置式であることぐらいかしら。 そこで、もっと ruby らしくと考えてみました。 先のサンプルでは、stack なる低レベルな中身をそのまま操作しているような 感じになっています。 それをメインループで隠蔽してみよう。 と、やっぱり、OOP ですね。(^-^) そこで、クラスを作ってみました。 Array Class の継承です。
#---------------------------------------------------------- rpn2.rb ^ print "RPN CALC of ruby, ready. created by guel 02/17/99\n"; class RpnCalc < Array def set(x) push x.to_f end def add push pop + pop end def multi push pop * pop end def sub push (-pop + pop) end def div push 1 / pop / pop end end rpncalc = RpnCalc.new while gets split.each do |x| begin case x when /\d/ rpncalc.set x when '+' rpncalc.add when '*' rpncalc.multi when '-' rpncalc.sub when '/' rpncalc.div else p x print "hey!\n" end rescue print "error, pop empty Stack or so.\n" end end p rpncalc end #---------------------------------------------------------- rpn2.rb ^ |
Count (04/02/1999) ->
update 04/02/1999, since 04/02/1999
Copyright (c) 1999 guel. All rights reserved.