Scala すごい。C# は残念。
今日会社で、
using System; class Foo {} class Bar {} class Hoge { internal static Foo M(Func<int, int> f) { return null; } internal static Bar M(Func<string, string> f) { return null; } } class Piyo { internal static void A(Foo f) { Console.WriteLine("Foo"); } internal static void B(Bar b) { Console.WriteLine("Bar"); } } public class Program { public static void Main() { Piyo.A(Hoge.M(i => i)); Piyo.B(Hoge.M(s => s)); } }
みたいなコードを書いたんですが、コンパイルエラーになってしまいました。
帰ってきてから Scala で同じようなコード、
class Foo class Bar object Hoge { def hoge(f: Int => Int): Foo = null def hoge(f: String => String): Bar = null } object Piyo { def a(f: Foo) = println("Foo") def b(b: Bar) = println("Bar") } object Main { def main(args: Array[String]) { Piyo.a(Hoge.hoge(i => i)) Piyo.b(Hoge.hoge(s => s)) } }
を試してみたら、普通に動きました。Scala すごい。
まぁ、C# でも型を明示すれば動くんですが・・・
public class Program { public static void Main() { Piyo.A(Hoge.M((int i) => i)); Piyo.B(Hoge.M((string s) => s)); } }
なんだかとても残念。