Очень простой эксперимент:
case class A(s: String) { def ++:(a: A) = A(s"(${a.s} + ${s})") }
A("x") ++: A("y") ++: A("z")
дает:
A((x + (y + z)))
так что x + (y + z)
а не (x + y) + z
. Таким образом, ++:
является правоассоциативным, как рекламируется.
Обратите внимание, что это ${a.s} + ${s}
, а не ${s} + ${a.s}
. В случае Queue
это, вероятно, аналогично, что-то вроде:
def ++:(left: Queue[A]): Queue[A] = left ++ this
так что порядок элементов появляется "как и должно быть", когда вы пишете q0 ++: q1
, который десугарсируется в q1.++:(q0)
, а затем расширяется до q0 ++ q1
.