トップ «前の日記(2006年06月03日) 最新 次の日記(2006年06月10日)» 編集

ohai日誌

2003|12|
2004|01|02|03|04|05|06|07|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|06|08|10|11|
2008|01|02|03|04|05|07|09|
2009|01|02|
2013|06|12|
2014|01|02|03|04|06|09|10|12|
2015|04|
2016|09|
2018|02|

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


トップ «前の日記(2006年06月03日) 最新 次の日記(2006年06月10日)» 編集