Ruby Cadet Club #2

Original 99/02/18, by guel

[ruby] RPN 電卓 2版

先の 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.