Я получаю представление о Scala с помощью книги artima "Programming in Scala".
Представляя черты Map
, авторы делают все возможное, чтобы описать синтаксис ->
как метод, который можно применить к любому типу для получения кортежа.
И действительно:
scala> (2->"two")
res1: (Int, String) = (2,two)
scala> (2,"two")
res2: (Int, String) = (2,two)
scala> (2->"two") == (2, "two")
res3: Boolean = true
Но они не эквивалентны:
scala> Map(1->"one") + (2->"two")
res4: scala.collection.immutable.Map[Int,String] = Map(1 -> one, 2 -> two)
scala> Map(1->"one") + (2, "two")
<console>:8: error: type mismatch;
found : Int(2)
required: (Int, ?)
Map(1->"one") + (2, "two")
Почему это так, поскольку мои первые тесты, кажется, показывают, что оба синтаксиса «пары» создают кортеж?
С Уважением.
Map(1 -> "one") + ((2, "two"))
прекрасно работает.Map(1 -> "one") + 2 -> "two"
не будет работать с той же ошибкой, что иMap(1->"one") + (2, "two")
- person om-nom-nom   schedule 26.06.2013map + 2 -> "two"
не работает (к сожалению, я не знаю). - person om-nom-nom   schedule 26.06.2013map + 2 -> "two"
даст вам(map + 2) -> "two"
:+
и->
имеют одинаковый приоритет и левоассоциативны. - person gzm0   schedule 26.06.2013