2016-08-23 8 views
0

私は最近スカラでの関数型プログラミングで作業を開始し、その過程でScalaを学習しています。別の関数をカレー関数を定義するために、第2章の演習のいずれかをしようとしている間、私はこれに走った:スカラ高次関数と暗黙の型入力

私は

def curry[A,B,C](f: (A,B) => C): A => B => C = 
    a: A => b: B => f(a, b) 

を記述する場合、私は

Chapter2.scala:49: error: ';' expected but ':' found.
a: A => b: B => f(a, b)
_______^
one error found

を取得するが、私が書く場合

def curry[A,B,C](f: (A,B) => C): A => B => C = 
    a => b => f(a, b) 

警告が表示されずに正常にコンパイルされ、動作します。違いは何ですか?

+3

最初の例は構文上正しいとは限りません。 – SamTebbs33

答えて

4

変数をかっこで囲む必要があります。あなたの例では、 と書くことができます。

def curry[A,B,C](f: (A,B) => C): A => B => C = 
    (a: A) => (b: B) => f(a, b) 
+0

これは私にとっては奇抜です。なぜ明白な理由はありますか? –

+1

一般に、カッコは 'a:A => ...'形式で必要です。ブロック内の最後の式である場合にのみ省略することができます。 http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#anonymous-functionsを参照してください。 –

関連する問題