カリーライス
カリー化(http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96)
って何じゃらほい?って感じだったので,色々調べておりました。
何となく分かった気がする。
C#3.0でもできるみたいです。
public class CurryTest { private delegate int FooFrame( int a ); public void MainFunc() { var v = new RefVal<int>( 99 ); FooFrame foo = v.Foooo; Console.WriteLine( foo( 1 ) ); } } public static class CurryExtension { public static int Foooo( this RefVal<int> v1, int v2 ) { return v1.Value + v2; } } public class RefVal<T> where T : struct { public T Value{ get; private set; } public RefVal( T v ) { this.Value = v; } }
100参照型でしかできないそうですがボクシングは血が出ちゃうので,
平和主義的にgenericsで。
Wikipediaのページを見ていると,「らむだけいさん!」とか「けんろん!」とか難しそうな言葉ばかりで恐かったです。
カリー化をする現実の動機は、関数に引数を一部だけ渡して新たな関数を作るのが便利な場合がとてもよくあるからである。たとえば、二つの引数を取る+関数の最初の引数を1にしてカリー化を行えば、インクリメント用の関数が簡単に作れる。なるほど。