Ошибка анализа вложенных кортежей в scala

Вещи перемещались в функциональное направление некоторое время. Два спокойных новых ребенка прошлых нескольких лет, Ruby и Python, оба радикально ближе к функциональным языкам, чем, что прибыло перед ними — так так, чтобы некоторые Lispers начали поддерживать один или другой как "достаточно близко".

И с аппаратными средствами с массовым параллелизмом, оказывающими эволюционное давление на всех — и функциональные языки в лучшем месте для контакта с изменениями —, это не столь далекий прыжок, как это однажды должно было думать, что Haskell или F# будут следующей большой вещью.

9
задан oxbow_lakes 8 September 2009 в 16:52
поделиться

2 ответа

причина довольно проста (я думаю) и связана с тем фактом, что (на черте Map ):

m += (a -> b)

является сокращением для:

m = m.+(t2) //where t2 is of type Tuple2[A,B]

Очевидно, что если вы используете запятую в первом примере, Scala интерпретирует это как вызов метода:

m = m.+(a, b)

Этого метода не существует в характеристике Map . Правила вызова метода означают, что сначала вычисляется a -> b (до Tuple2 ) и, следовательно, вызывается правильный метод. Примечание: Использование дополнительной пары круглых скобок отлично работает:

m += ( (a,b) ) //works just fine but less readable
10
ответ дан 4 December 2019 в 21:10
поделиться

Oxbow прав. Однако вы можете использовать другую скобку для устранения неоднозначности:

m += (((0,2), "b"))
0
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: