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)
あれ、ちがうのか。
たぶん実際に使うことはないんだろうけど、どんなソースなのか気になる。
お客様の中でこのソースをご存じの方は居られませんかー?
居られませんかー?
コメント
こうです。メソッド定義だけだとclass式がnilに評価されてしまうのですよ。
class Bar < (class Foo; def hoge; puts ‘Yes!’; end; self end); end
なるほど、そこにselfが必要なんですね。
(class Bar < (class Foo; def hoge; puts ‘Yes!’; end; self end); self end).new.hoge #=> Yes!
うぉ、動いた!ありがとうございました!