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ではなくObjectになっているように見えますが、それはなぜですか?

4

1 に答える 1

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ものを渡しているためです。fieldsList.type

于 2012-05-20T21:55:55.563 に答える