Я только начал играть с Scala, и я только что узнал о том, как методы могут быть сделаны право-ассоциативными (в отличие от более традиционной лево-ассоциативности, характерной для императивных объектно-ориентированных языков).
Сначала, когда я увидел пример кода cons
списка в Scala, я заметил, что каждый пример всегда имел Список в правой части:
println(1 :: List(2, 3, 4))
newList = 42 :: originalList
Однако, даже после просмотра этого снова и снова, я не думал дважды об этом, потому что я не знал (в то время), что ::
- это метод на List
. Я просто предположил, что это оператор (опять же, в смысле оператора в Java), и что ассоциативность не имеет значения. Тот факт, что List
всегда появлялся с правой стороны в примере кода, просто казался случайным (я думал, что это, возможно, просто "предпочтительный стиль" ).
Теперь я знаю лучше: он должен быть написан таким образом, потому что ::
является право-ассоциативным.
Мой вопрос: в чем смысл определения право-ассоциативных методов?
Это чисто по эстетическим соображениям, или же право-ассоциативность действительно имеет какую-то выгоду по сравнению с левой ассоциативностью в определенных ситуациях?
От моей (новички) точки зрения, я действительно не вижу, как
1 :: myList
лучше, чем
myList :: 1
но это, очевидно, такой тривиальный пример, что я сомневаюсь в его справедливом сравнении.