Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Indexer

ap-list:3057 Indexer

もりきゅうです。

ap-list:1400 Re:Re:配列プロパティ 付近で作って

ap-dev:0442 Re: ListBox?#selected[index] などで使われている Indexer なんですが

ruby-dev:12757 Re: Named Array Ref でたけさんが振ってくれてますね。 で、ruby-dev の過去ログを読んでいると

ruby-dev:7678 Re: Ruby 2.0 の話題解禁( Re: Newcoerce scheme) このようなスレッドがあり、よく似た話題になってます。

さて、今回はRuby-1.7以降の機能を使って Indexer を再実装してみた ので、載せておきます。

前回と効率はあんまり変わらないような気もします。 もうちょっとましな方法がありそうだ。

class Object
private
  def attr_indexer(*a)
    a.each do |m|
      define_method(m) {
        aref = method(m.to_s + '_aref').to_proc
        aset = method(m.to_s + '_aset').to_proc
        mod = Module.new {
          define_method(:[] , aref)
          define_method(:[]=, aset)
        }
        obj = m.to_s # dup
        obj.extend(mod)
        obj
      }
    end
  end
end
class Foo
  def bar_aref(i)
    print "bar[#{i}]\n"
  end
  def bar_aset(i,v)
    print "bar[#{i}]=#{v}\n"
  end
  attr_indexer :bar
end
foo = Foo.new
foo.bar[1]
foo.bar[2]=3
bar = foo.bar
bar[:a]
bar[:b]=:c
Last modified:2003/07/14 21:39:22
Keyword(s):
References:[Apollo]