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までなのは適当。その他も適当