著作一覧 |
Rubyにはリストがありません。だから自分で作らなければなりません。
class List def initialize(x, lis) @car = x @next = lis end attr_accessor :car def cdr @next end end
ここでリストの長さを求める処理を追加したいとします。
コーディング・スタイルは典型的な「自転車置き場の議論」なのでそれほど気にする必要はないと思いますが、良く見られる例では、
def size_of(lis) if lis.nil? 0 else 1 + size_of(lis.cdr) end end
のようにListの長さを求める処理を書いているのですが、実際には
def size_of(lis) if lis.nil? 0 else 1 + size_of(lis.cdr) end; end
のようにendは最後にまとめて書くことが多いです。Rubyistのコードブロックの認識は、実はPythonistaに近いんじゃないかなと思っています。
しかし、もっと良いRubyistのコードは、
class List def size_of() if self.nil? 0 else 1 + cdr.size_of end; end; end
のように、オープンクラスを利用して、インスタンスメソッドに書きなおすことです。Rubyistのメソッドの認識は、実はPythonistaに近いんじゃないかなと思っています。
ただ、この場合の問題は、このメソッドが正しく終了判断できないことです。
『Scheme初心者へのアドバイスを書いてみる』にインスパイアされて何か書いてみたくなったのだが、あまりにくだらなくなってしまったので、バグを入れることにしてみた。
class NilClass def size_of 0 end; end
ジェズイットを見習え |