Scala 调用的方法不是预期的方法

Scala 调用的方法不是预期的方法,scala,playframework-2.0,Scala,Playframework 2.0,上周,我花了很多(太多)时间在一个奇怪的问题上。我想使用gnieh.diffson对现有对象进行修补,客户机发送一个patch/api/test/patch请求,其中包含格式良好的Json修补程序。然后我解析补丁并应用它: import gnieh.diffson._ val patch = JsonPatch.parse(request.body.asText.getOrElse("")) val workspace = """{"node":{}}""" val result = pa

上周,我花了很多(太多)时间在一个奇怪的问题上。我想使用
gnieh.diffson
对现有对象进行修补,客户机发送一个
patch/api/test/patch
请求,其中包含格式良好的Json修补程序。然后我解析补丁并应用它:

import gnieh.diffson._ 
val patch = JsonPatch.parse(request.body.asText.getOrElse("")) 
val workspace = """{"node":{}}""" 
val result = patch(workspace) 
println(result)
此代码在简单的
应用程序中运行良好,但在播放
控制器上失败

[错误]PatchException::中不存在元素节点 “{\”节点\“:{}}”(JsonPatch.scala:140)
[错误]gnieh.diffson.Operation.action(JsonPatch.scala:140)
[错误]gnieh.diffson.Add.action(JsonPatch.scala:174)

解决办法是对每件事都加以限定。
gnieh.diffson.JsonPatch#apply
类有3个
apply
方法:

def apply(json : scala.Predef.String, compacted : scala.Boolean = { /* compiled code */ }) : scala.Predef.String = { /* compiled code */ } 
def apply(value : net.liftweb.json.JValue) : net.liftweb.json.JValue = { /* compiled code */ } 
def apply[T](<value : T>)(implicit evidence\$1 : scala.Predef.Manifest[T]) : T = { /* compiled code */ } 
def apply(json:scala.Predef.String,压缩:scala.Boolean={/*编译代码*/}):scala.Predef.String={/*编译代码*/}
def apply(值:net.liftweb.json.JValue):net.liftweb.json.JValue={/*编译代码*/}
def apply[T]()(隐式证据\$1:scala.Predef.Manifest[T]):T={/*编译代码*/}
我认为第一个被调用是因为“workspace”是一个字符串,但我错了。调用的方法是最后一个,带有隐式证据

我目前的解决方案是将工作区解析为
net.liftweb.json.JValue
,但我对此并不满意,因为:
-我无法理解为什么它是最后一个被调用的方法。
-我必须将
net.liftweb.json.JValue
格式化为字符串,以重新创建
play.api.libs.json.JsObject
。。(因为我在以后的过程中需要它)

你能解释一下为什么被调用的方法比较复杂吗


非常感谢

合同中有一条条款放弃使用默认参数的替代方案: