石橋秀仁です。

> 添付するのはやめにして、ウェブサイト(GeoCities)で公開します。
> と、思ったんですが、いまftpできないようなので、
> 週明けくらいにftpしてからアナウンスします。

ということで、

http://www.rr.iij4u.or.jp/~hideto-i/rb/index.html

に、Flyweightのパッケージを置きました。

> > あと、ArrayにFlyweightをインクルードできませんでした。なぜでしょうか?

これですが、次のように、返り値の共有ができるようになりました。

-----8<-------
# スクリプト
require "flyweight"

class Array
  extend Flyweight
  def_flyweight_method :find_all  # <- Array#find_allの返り値を共有
end

a = []
b = []

2.times { 0.upto(3) {|n| a << n} }
2.times {|n| b[n] = a.find_all {|e| e % 2 == 0} }

p a, b[0], b[1]
p b[0].equal? b[1]

# 出力
[0, 1, 2, 3, 0, 1, 2, 3]
[0, 2, 0, 2]
[0, 2, 0, 2]
true
-----8<-------

Flyweightなしでは、最後が
false
になります。

# 組み込みのArrayとStringは参照ではなく値であるほうが便利かも・・・

--
Hideto "rubyholic" ISHIBASHI