BLOGTIMES
2011/01/27

下位クラスで再定義された定数を上位クラスで使う

  ruby 
このエントリーをはてなブックマークに追加

ちょっと前に書いたRubyスクリプトの定数部分だけを書き換えたクラスが必要になったのですが、コピーして定数部分を書き換えて使うのはださすぎるし、なるべくスーパークラスの修正は少なくしたいし、ということで何かいい方法がないかと思って試行錯誤してみたらいい方法を思いついたのでメモ。

具体的にはCONSTと書くところをself.class::CONSTとすることで上位クラスで定義されたメソッドであっても、下位クラスで定義された定数を使って動いてくれます

class A CONST = 'aaa' def put_const() puts CONST + ',' + self.class::CONST end end class B < A CONST = 'bbb' end class C < B end A.new.put_const # => aaa,aaa B.new.put_const # => aaa,bbb C.new.put_const # => aaa,bbb

本当はちゃんとリファクタリングすべきですが、今回は急ぎなのでひとまずこれでよしとしました。
ファイルをコピーして使うよりも幾分ましでしょう。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4038
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン