2012-05-20 12 views
1

Так что я имел список кортежей, как это:Scala типа списка несоответствие

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)}) 

I get:

[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) 

Таким образом, похоже, что список теперь объекта Object вместо 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

@ Оуэн, да, я тоже получил ошибку. – dhg

+0

Да, я глуп. Я пытался упростить, чтобы сделать вопрос более ясным. Проблема была в том, что я сформировал что-то вроде: val a = List (к чему-то вроде vale a = List ( –

Смежные вопросы