4

私はいくつかの関数型プログラミング言語を調べて、興味深いことを学んでいます。今は Scala に注目しています。私がやろうとしているのは、double1 つの引数を取り、それを 2 倍にするという関数を作成する最も簡単な方法を見つけ出すことです。これまでに思いついたのは次のとおりです。

def double = (x:Int) => x*2

また

def double(x:Int) = x*2

これは機能しますが、最も簡単な方法を探しています。Haskell では、次のように簡単に実行できます。

double = (*2)

これは部分的に適用される関数であるため、変数に名前を付けたり、型を指定したりする必要はありません (*関数がそれを処理してくれるはずです)。Scalaを使用してこれを行う同様の方法はありますか? _特にの代わりに使用して、いくつか試してみましたxが、どれもうまくいかないようでした。

4

2 に答える 2

8

これはどう:

val double = (_: Int) * 2

ここでdoubleは、Functionではなく、 を使用しmethodます。最初の例では、戻り値の型がのmethod名前付きを定義しました。2 番目の例では、. Scalaとは異なります。doubleFunctionmethodFunctionmethod

コンパイラが型情報を取得できる場合は、Functionさらに単純に書くことができます:

scala> def apply(n: Int, f: Int => Int) = f(n)
apply: (n: Int, f: Int => Int)Int

scala> apply(10, 2*)
res1: Int = 20

scala> apply(10, 100+)
res2: Int = 110
于 2013-06-08T03:04:27.413 に答える