Scala命名参数:递归调用

时间:2017-08-22 09:46:06

标签: scala compiler-errors named-parameters

非常奇怪的情况。

我有以下代码段:

case class SomeResponse(
    ok: Boolean,
    result: Seq[Data]
)

class TestContainer {

    def testMethod() = {

        val response = SomeResponse(
                  // vvv - issue is here
          ok = true, Seq(getStubData)
                  // ^^^
        )

        val result = Json.toJson(response)
    }

    def getStubData = Data(10, "James")
}

当我没有指定参数名称时,所有内容都会编译并按预期工作。

但是当我明确设置参数名称

val response = SomeResponse(
           // vvv - issue is here
ok = true, result = Seq(getStubData)
           // ^^^

编译器符合以下消息:

Error:(63, 30) recursive value response needs type
    val result = Json.toJson(response)

命名参数是否有任何特定的编译器行为?

1 个答案:

答案 0 :(得分:2)

这是scala中半解决问题与sbt中另一个问题之间相互作用的结果:

根据那里的评论和相关问题判断,在类型推断期间,编译器会以相同的方式处理所有x = y语句,从而在尝试推断上面的result时导致一个循环。

解决方法:

  • 在上面提供明确的result甚至response类型;任何会破坏类型推断周期的事情都会做到
  • 重命名val result