class Program
{
static void Main(string[] args)
{
Curry<double> c = new Curry<double>();
Program p = new Program();
Curry<double>.CurriedFunc cf = c.Make(p, "Devide");
Console.WriteLine(cf(2)(3));
Console.ReadLine();
}
public double Devide(int x, int y)
{
return (double)x / (double)y;
}
}
class Curry<T>
{
public delegate T BoundFunc(params object[] args);
public delegate BoundFunc CurriedFunc(params object[] args);
public CurriedFunc Make(object instance, string methodName)
{
MethodInfo mi = instance.GetType().GetMethod(methodName);
return delegate(object[] pre)
{
return delegate(object[] post)
{
ArrayList al = new ArrayList();
al.AddRange(pre);
al.AddRange(post);
return (T)mi.Invoke(instance, al.ToArray());
};
};
}
}
ジェネリクスを使う意味がよくわからない。
あとこれだとcf(1)(2)(3)(4)みたいに何度も束縛できない。
いまいちだなあ。