非常奇怪的情况。
我有以下代码段:
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)
命名参数是否有任何特定的编译器行为?
答案 0 :(得分:2)
这是scala中半解决问题与sbt中另一个问题之间相互作用的结果:
根据那里的评论和相关问题判断,在类型推断期间,编译器会以相同的方式处理所有x = y
语句,从而在尝试推断上面的result
时导致一个循环。
解决方法:
result
甚至response
类型;任何会破坏类型推断周期的事情都会做到val result