ごとけんです
教えて下さい。
インスタンス変数を持てない組み込みクラスに
数個だけインスタンス変数を持たせたいときは、
delegate を使うと良いのでしょうか?
require "delegate"
foo = Array.new
foo2 = SimpleDelegator.new(foo)
class << foo2
def a
@a = 0 unless defined? @a
@a
end
end
print "foo2 << 1 ==> ", (foo2 << 1).inspect, "\n"
print "foo2.size ==> ", foo2.size.inspect, "\n"
print "foo2.a ==> ", foo2.a.inspect, "\n"
これの結果は
foo2 << 1 ==> [1]
foo2.size ==> 1
foo2.a ==> 0
となり期待通りです。
まず delegate.rb はこういう利用を意図して作られてると
理解してよろしいのでしょうか?
ただこれだと、foo2.kind_of?(Array) => false です。
これはしかたないのですか?
さらにこれだと foo2 の特異メソッドとして定義されてる
わけですが、複数のインスタンスを作れるようなクラスを
定義する事はできますか? delegate でできなければ
どうするのがスマートでしょうか?
-- gotoken