From: Shinya Kawaji Date: 2005-11-09T01:48:57+09:00 Subject: [ruby-list:41519] Re: カプセル化のソースについて かわじ、です。 > オブジェクト指向スクリプトRuby(書籍) > アスキー出版局 (まつもとゆきひと/石塚 圭樹) > 4000円+税 > > のP167のカプセル化のところでソースをそのまま入力しても > エラーが出ます。 私も最初の頃は、プログラム経験が浅かったこともあり、この本を読み通すのに 苦労した覚えがありますが、その直前の箇所で ここではスタックは以下の 3つの手続きでアクセスできるものとします と書かれている通り、このコードは「仮の話」で、実際の Rubyのコードとは 違います。 もう少し読み進めると分かりますが、ここの節は、 4.1 オブジェクト指向プログラミングとは となっており、オブジェクト指向プログラミングの「一般的な話」をしていて、 実際の Ruby の場合がどうなっているかは、次の 4.2 Rubyのオブジェクト指向機能 で、紹介されています。 しかし、 > 上記の本よりソースを引用 > > stack=stack_new() > stack_push(stack,1) > stack_push(stack,2) > stack_push(stack,3) > > print stack_pop(stack),"\n" > print stack_pop(stack),"\n" > print stack_pop(stack),"\n" > > //EOF というコードそのものの Rubyバージョンは(今、本をチラッと見た限りでは)載っ てないように思いますので、書いてみるとしたら、以下のような感じでしょうか。 # Stack クラス - メソッドは、push と pop のみ class Stack def initialize @stack = [] end def push(val) @stack.push(val) return self end def pop return @stack.pop end end # 新しいスタックを生成 stack = Stack.new # スタックにデータを追加 stack.push(1) stack.push(2) stack.push(3) # スタックからデータを取り出し print stack.pop, "\n" print stack.pop, "\n" print stack.pop, "\n" 頑張ってください。