継承の書き方。

OOエンジニアの輪! ~ 第 38 回 笹田 耕一さんの巻 ~

クラスの継承するときには、こんな風に書くんですけど、実は継承元クラス指定の部分には、任意の expression が書けるので、例えば、ここでクラス定義を書くとか。

ΩΩΩ < ナ、ナンダッテー!! inh_test.rb

  1 class Foo
2   def hoge
3     puts 'Yes!'
4   end
5 end
6
7 class Bar < Foo; end
8
9 Bar.new.hoge        #=> Yes!

inh_test2.rb

  1 class Bar < (class Foo; def hoge; puts 'Yes!'; end; end); end
2
3 Bar.new.hoge        #=> inh_test2.rb:1: superclass must be a Class (NilClass given) (TypeError)

あれ、ちがうのか。
たぶん実際に使うことはないんだろうけど、どんなソースなのか気になる。

お客様の中でこのソースをご存じの方は居られませんかー?
居られませんかー?

コメント

  1. Yugui より:

    こうです。メソッド定義だけだとclass式がnilに評価されてしまうのですよ。

    class Bar < (class Foo; def hoge; puts ‘Yes!’; end; self end); end

  2. yoshuki より:

    なるほど、そこにselfが必要なんですね。

    (class Bar < (class Foo; def hoge; puts ‘Yes!’; end; self end); self end).new.hoge #=> Yes!

    うぉ、動いた!ありがとうございました!

タイトルとURLをコピーしました