| 著作一覧 |
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
ジェズイットを見習え |