疑問点 その一
2006/03/20の書き込みの続き。
classboxで拡張したフィールドの初期化と参照の関係をどう保証するのか、というのが最初の疑問点である。Javaで書くとタイピング量が増えるので、擬似Rubyコードで書く。
classbox Foo class A; end class B < A; end end classbox Bar import A, B from Foo class A def a(); make_b(); end end class B def initialize; @bar = 100; end def make_b(); B.new; end def b(); @bar; end end end classbox Baz import A, B from Foo class B def initialize; @baz = "abc"; end def b(); @baz; end end class C def c(x); x.b(); end end class D < C; end end classbox Main import B from Bar import D from Baz def main(argv) b = B.new.a() p D.new.c(b) end end
main()の中の、B.new.a()で返される値は、Bar環境で生成されたBクラスインスタンスであり、D.new.c()の呼び出しの中ではBaz環境に入るので、B#b()で参照されるのは@bazのほうになる。従って、未初期化状態のインスタンス変数が参照されてしまう。
この程度のことは、アプリケーションで起きないように注意すべきということになるのかもしれないが。