オーバーライド禁止 (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勉強会@関西でやってくれんかのう。