2012-05-20 159 views
1

所以我有过这样的元组的列表:斯卡拉列表类型不匹配

val rooms = List(("Hi", "mom"),("hi", "dad")) 
val foo = rooms.map(arg =>{ 
        var fields = List 
        (new JField("greeting",arg._1), 
         new JField("recipient",arg._2)) 
         new JObject(fields)}) 

了。在土地多的快乐,但是当我改变了房间列表,像这样:

case class Room(greeting:String, recipient:String) 
val rooms = List(Room("Hi", "mom"),Room("hi", "dad")) 
val foo = rooms.map(arg =>{ 
        var fields = List 
        (new JField("greeting",arg.greeting), 
         new JField("recipient",arg.recipient)) 
         new JObject(fields)}) 

我得到:

[error] <file>: type mismatch; 
[error] found : scala.collection.immutable.List.type (with underlying type object List) 
[error] required: List[blueeyes.json.JsonAST.JValue] 
[error]      new JArray(fields) 

因此,看起来该列表现在是对象而不是以前的JField,为什么?

回答

2

,如果你不分离从(List它的工作原理:

var fields = List(
    new JField("greeting", arg.greeting), 
    new JField("recipient", arg.recipient)) 

基本上,它的解析如下:

var fields = List       // assign the List companion object 

(new JField("greeting", arg.greeting), // construct a tuple with two items 
    new JField("recipient", arg.recipient)) // ...but don't use or assign it 

new JObject(fields)      // Make JObject containing the type 

的错误出现,因为JObject构造函数需要一个JValue但你通过它fields其类型List.type

+0

此外,第一个版本也有同样的问题(至少当我尝试它)。所以他们之间并没有什么区别。 – Owen

+0

@Owen,是的,我也遇到了错误。 – dhg

+0

是的,我很愚蠢。我试图简化以使问题更清楚。我遇到的问题是我编写了类似的内容:val a = List(类似于vale a =列表( –