Это работает, когда я пытаюсь сопоставить случае конструктор класса со списком кортежей:Mapping против списка Scala кортежей с аргументами по умолчанию
scala> case class MyClas(x:Int, y:String, z:String)
defined class MyClas
scala> Seq((1,"hey","you"), (2, "blue","shoe")) map Function.tupled(MyClas)
res1: Seq[MyClas] = List(MyClas(1,hey,you), MyClas(2,blue,shoe))
Но когда есть аргумент по умолчанию в конструкторе класса:
scala> case class MyClas(x:Int, y:String, z:String, zz:String="blue")
defined class MyClas
scala> Seq((1,"hey","you"), (2, "blue","shoe")) map Function.tupled(MyClas)
<console>:10: error: type mismatch;
found : MyClas.type
required: (Int, String, String) => ?
Seq((1,"hey","you"), (2, "blue","shoe")) map Function.tupled(MyClas)
следующие работы, но он чувствует, что должен быть более простой способ:
scala> Seq((1,"hey","you"), (2, "blue","shoe")) map Function.tupled((x,y,z)=>MyClas(x,y,z))
res3: Seq[MyClas] = List(MyClas(1,hey,you,blue), MyClas(2,blue,shoe,blue))
Edit: О, я забыл уточнить, что это Scala 2.10.4, но, согласно комментарию @ mohit, это теперь работает в Scala 2.11. Интересно.
работы в Скале 2.11.6, Java 1.7.0_71 , – mohit
'.map {case (x, y, z) => MyClas (x, y, z)}' немного лучше, но я думаю, что это лучшее, что вы получите. –
Еще один способ упростить код: 'map Function.tupled (MyClas (_, _, _))' – Kolmar