関数にコードブロックを渡す
PythonでRubyのようにコードブロックを渡すやり方。デコレータを利用する。
>>> def each(L): ... def each_(func): ... for x in L: ... func(x) ... return each_ ... >>> L = range(10) >>> >>> @each(L) ... def pr(x): ... print '<', x, '>' ... < 0 > < 1 > < 2 > < 3 > < 4 > < 5 > < 6 > < 7 > < 8 > < 9 > >>> >>> def map(L): ... L2 = [] ... def map_(func): ... for x in L: ... L2.append(func(x)) ... return L2 ... return map_ ... >>> @map(L) ... def dbl(x): ... return x*2 ... >>> dbl [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
戻り値がある場合は関数オブジェクトの変数(この例の場合dbl変数)に戻されるのでその部分は分かりずらいが、構文は結構似ている。もちろんリソース管理もwithを使用しなくても可能。
Perl6やSchemeのように(?)シンタックスシュガーを作れれば、Rubyのコードブロックと同様な構文で実現できるかもしれない。C++ではどこまでRubyと構文上や機能上似させることができるのだろう?