2006年06月08日
_ Symbol#[]
<URL:http://d.hatena.ne.jp/shinichiro_h/20051121#p1>と <URL:http://wota.jp/ac/?date=20060314#c03>をマージして さらに boost::bindっぽい見た目をふりかけてみました。
class BindParamPlaceHolder
def initialize(ord)
@ord = ord
end
attr_reader :ord
Holders = (0..30).map{|n| BindParamPlaceHolder.new(n)}
end
(1..30).each do |n|
eval <<-EOS
def _#{n}
BindParamPlaceHolder::Holders[#{n}]
end
EOS
end
class Symbol
def [](*a1)
proc do |*a2|
obj, *args = a1.map{|a| a.is_a?(BindParamPlaceHolder) ? a2[a.ord-1] : a}
obj.__send__(self, *args)
end
end
end
if __FILE__ == $0
p (1..10).map(&:/[2.0, _1])
p (1..10).map(&:/[_1, 2.0])
end
1から30までなのは適当。その他も適当
[ツッコミを入れる]