NOEMBLEM/エンブレムが設定されていません。

メールの詳細(メール表示)

件名:

Indexer

差出人: Kazuhiro Yoshidaさん
送信日時 2003/03/05 06:20
ML.NO [ap-list:3057]
本文:

もりきゅうです。

[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)
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/7678
このようなスレッドがあり、よく似た話題になってます。

さて、今回は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

----
YOSHIDA Kazuhiro moriq@… http://www.moriq.com/

このエントリーをはてなブックマークに追加
添付:

このメールには下記のメールが返信されています:

更新順メールリスト