Rubyのラムダ式の文法がわからなかったので調べました。
また、普段よく使う言語にもラムダ式があるので、一緒に調べてまとめました。
C#
C# はラムダ式を使う場合はデリゲートを定義します。
delegate int Plus(int a, int b);
Plus plus = (a, b) => (a + b);
plus(5, 3) // => 8
C# では delegate を定義しないとラムダ式が使えないのですが、標準で Func という名前のデリゲートが用意されています。
// delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)
Func<int, int, int> plus = (a, b) => (a + b);
plus(5, 3) // => 8
Java 8
Java では関数型インターフェースを定義します。関数型インターフェースとは抽象メソッドを1つ定義したインターフェースのことです。
@FunctionalInterface はコンパイル時に関数型インターフェースの条件を満たさないとコンパイルエラーになります。
@FunctionalInterface
interface Plus {
int apply(int a, int b);
}
Plus plus = (a, b) -> (a + b);
plus.apply(5, 3); // => 8
Groovy
Groovy はラムダ式ではなく、クロージャを使います。
def plus = { a, b -> (a + b) }
plus(5, 3) // => 8
Ruby
plus = -> (a, b) { (a + b) }
plus.(5, 3) #=> 8
JavaScript
var plus = function (a, b) { return (a + b); }
plus(5, 3);
C++
g++ -std=c++11 lambda.cpp
auto plus = [](int a, int b){ return (a + b); };
plus(5, 3) // => 8