У меня есть список кортежей, и я хотел бы пройти и получить значение каждого элемента.scala новичок с проблемами с кортежами и замыканиями
это код:
scala> val myTuples = Seq((1, "name1"), (2, "name2"))
myTuples: Seq[(Int, java.lang.String)] = List((1,name1), (2,name2))
scala> myTuples.map{ println _ }
(1,name1)
(2,name2)
res32: Seq[Unit] = List((),())
До сих пор, так хорошо, но
scala> myTuples.map{ println _._1 }
<console>:1: error: ';' expected but '.' found.
myTuples.map{ println _._1 }
Я также попытался с:
scala> myTuples.map{ println(_._1) }
<console>:35: error: missing parameter type for expanded function ((x$1) => x$1._1)
myTuples.map{ println(_._1) }
scala> myTuples.map{ val (id, name) = _ }
<console>:1: error: unbound placeholder parameter
myTuples.map{ val (id, name) = _ }
scala> myTuples.map{ x => println x }
<console>:35: error: type mismatch;
found : Unit
required: ?{val x: ?}
Note that implicit conversions are not applicable because they are ambiguous:
both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A]
and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A]
are possible conversion functions from Unit to ?{val x: ?}
myTuples.map{ x => println x }
Объявляя переменную, и с помощью круглых скобок сделал трюк, но я хотел бы знать, почему другие варианты не сработали
это работало нормально
myTuples.map{ x => println("id: %s, name: %s".format(x._1, x._2)) }
scala> myTuples.map{ x => println("id: %s, name: %s".format(x._1, x._2)) }
id: 1, name: name1
id: 2, name: name2
res21: Seq[Unit] = List((),())
scala> myTuples.map{ x => val(id, name) = x; println("id: %s, name: %s".format(id, name)) }
id: 1, name: name1
id: 2, name: name2
res22: Seq[Unit] = List((),())
scala> myTuples.map{ x => println(x._1) }
Что происходит со мной, с моими первыми шагами с Скале, что настаивая немного вы получите то, что вы хотите, но вы не знаете, почему первые варианты вы пытались не работа ...
FWIW, 'map' используется, когда вы хотите, чтобы преобразовать содержимое коллекции. Поскольку вы не заботитесь о результатах, предпочтительным является «foreach». – leedm777
приятный отзыв, и он также делает намного более ясным намерение разработчика – opensas