オーバーライド禁止 (2)

昨日の話題、サブクラスのメソッド・オーバーライド禁止kdmsnr さんや iwadon さんに色々教えてもらったのだが、なかださんが決定版を作ってくれた。ありがとうございます。孫クラスでもちゃんと禁止されるヤツ。


一見じゃ理解できないのでバラして読む。

while klass = klass.superclass
   ...
end

ふむ、クラスを遡って処理してるのか。while 式の中で代入って C では良く見るけどわかりにくい。Ruby で先祖を each するメソッドってないよなー。レアケースだし。

def each_superclass
   klass = self
   while klass = klass.supreclass
      yield klass
   end
end

なんて標準であると便利じゃろか? Smalltalk にはありそうな(勘)。
んー、これもなんか違うな。もっと再帰っぽくできるかな?
(最初 enumerator でやろうとしたけど、なんか違ったっぽい)


サブクラス定義で呼ばれることを想定した Object#instance_eval っていうのもピンとこないなー。Module#remove_method はオリジナルのメソッドが消えそうな感じ。概念から勉強しないと良くわからないな。


rescue キモスw:

def foo
   "D#foo"
end rescue p $!

rescue 修飾子 にある

式1 rescue 式2

パターンは知っているんだけど。def に繋げるのはいつ見ても馴れないな。


メタは一度気合を入れて勉強しないとと思いつつ日々が流れていく。Ruby勉強会@関西でやってくれんかのう。