我可以合併兩個列表如下起來:右聯想與運營商:
List(1,2,3) ::: List(4,5,6)
,其結果是:
res2: List[Int] = List(1, 2, 3, 4, 5, 6)
操作:::
是正確的關聯,這是什麼意思?
在數學,右結合是:
5 + (5 - (2 * 3))
我可以合併兩個列表如下起來:右聯想與運營商:
List(1,2,3) ::: List(4,5,6)
,其結果是:
res2: List[Int] = List(1, 2, 3, 4, 5, 6)
操作:::
是正確的關聯,這是什麼意思?
在數學,右結合是:
5 + (5 - (2 * 3))
右結合裝置操作員(在我們的情況下,該方法:::
),而使用左操作數作爲參數在右操作數被應用。這意味着,實際的方法調用是這樣完成的:
List(4,5,6).:::(List(1,2,3))
由於:::
預規劃名單,結果是List(1,2,3,4,5,6)
。
在最一般的意義上,right-associative意味着,如果你不把任何括號,它們將被認爲是在右邊:
a ::: b ::: c == a ::: (b ::: c)
而左結合運營商(如+
)將有
a + b + c == (a + b) + c
然而,根據spec(6.12.3中綴行動)
左關聯二進制運算
e1 op e2
被解釋爲e1.op(e2)
。如果op是rightassociative,則 的相同操作被解釋爲{ val x=e1; e2.op(x) }
,其中x
是一個新名稱。
因此,scala中的右關聯運算符被視爲右操作數的方法,其左操作數作爲參數(如@yuval的答案中所述)。
看看http://stackoverflow.com/questions/1162924/what-good-are-right-associative-methods-in-scala – Yaneeve