2017-02-16 15 views
1

スケーラのリスト追加操作についての説明と私の理解に基づいて、それは正しい結合です。だから文を与えた List1 ::: List2は何もList2.:::List1です。これは私が次の操作スカラリスト追加操作 - 説明が必要

val list1 = List(1,2,3,4); val list2 = List(5,6,7,8) ; list1 ::: list2 // this is good 

list2.::: list1 //ERROR - Not applicable to List[B]code here

を実行しようとしましたと述べたと、なぜ第二追加操作はコンパイルされませんか?

+4

括弧がありません。 'list2。:::(list1)'を試してください。 – marstran

+0

が働いた。しかし、余分なことは何をしましたか?それはコンパイラがそのステートメントを理解するのにどのように役立つのですか? – Gurupraveen

+1

'list2。::: list1'は無効なスカラ構文です。 ( 'list2 :: ::(list1)'のように)括弧を使用するか、元のように(list1 ::: list2'のように)挿入表記を使用する必要があります。この特定の関数では、関数が右結合であるため、中置表記は最初に 'list1'が書き込まれます。コロンで終わる名前の関数は、Scalaでは右結合です。 – marstran

答えて

1

コンパイルされないのは、そこに構文が混在しているためです。あなたは、メソッド呼び出しのための定期的な構文を使用することができます :

list2.:::(list1)

は、ドットと括弧に注意してください。

それとも、アリティ-1のメソッドを呼び出すための中置記法を使用することができます。

list1 ::: list2

しかし、あなたは、両者の間に混ぜる傾けます。

:::演算子は実際には前置演算子であり、追加演算子ではありません。 これはlist2で動作します(正しく連結していると正しく指定されています)。その前にlist1の要素が追加されます。