2016-12-26 6 views
-2

右例:Scalaにドットの規則がありますか?

"Hello" foldLeft(1L)((a, b) => a * b) 

それが説明されている方法:

"Hello".foldLeft(1L)((a, b) => a * b) 

REPLはエラーを出力しますか?いくつかのルールはありますか?私はScalaでドットをスキップするのは良いと思っていますが、いくつかの例はうまくいきません。

error: Long(1L) does not take parameters "Hello" foldLeft(1L)((a, b) => a * b)

+0

あなたはどのような誤りがあるかを言う必要があります。 – Carcigenicate

+0

'エラー:長い(1L)はパラメータを取らない "こんにちは "foldLeft(1L)((a、b)=> a * b)' – TheSN

答えて

1

「インミックス表記」は、Arity-1(単一パラメータ)のメソッドで使用できます。規約は、これらを純粋に機能的な方法に使用することです。 foldLeftのようなカリーされた関数(複数のパラメーターリスト)では、最初のパラメーターリストに対してのみインフィックス表記を使用できます(これは混乱し、おそらくこれをしたくないでしょう)。

関連:

What are the precise rules for when you can omit parenthesis, dots, braces, = (functions), etc.?

ドキュメント:カリー化関数で

http://docs.scala-lang.org/style/method-invocation

Curried method call by infix notation

1

foldLeftはカルト関数であり、カルト関数は直感的ではなく、インフィックス(ドットなし)表記で使用できます。次のように、中括弧をかっこで囲む必要があります。

scala> ("Hello" foldLeft 1L)((a, b) => a * b) 
res0: Long = 9415087488 

この場合は、この種の使用をお勧めします。

いくつかの一般的な規則については、style guideをご覧ください。

関連する問題