我有一个从xml-Node中提取动作对象的方法:
private def appendActionsFromXml(device: Device, xml: Node) = {
xml \ "actions" \ "action" map {
x => {
val key = x \ "@key" text
val value = x \ "@value" text
device.createAction(key, value)
}
}
}
但是,由于我在同一个类中导入了导入net.liftweb.json.JsonDSL._,因此当我从x中提取“@key”属性时,我会感到一种暧昧:
[INFO] Note that implicit conversions are not applicable because they are ambiguous
[INFO] both method string2jvalue in trait Implicits of type (x: String)net.liftweb.json.JsonAST.JString
[INFO] and method augmentString in object Predef of type (x: String)scala.collection.immutable.StringOps
[INFO] are possible conversion functions from String to ?{val apply: ?}
[INFO] val value = x \ "@value" text
如何通过这种方法解决这种暧昧关系?
答案 0 :(得分:0)
试试这个:
val key: String = x \ "@key" text
val value: String = x \ "@value" text
答案 1 :(得分:0)
如果可能,将您的JsonDSL-import(或相反的XML-imports)移动到较小的范围。
class A {
def doXmlStuff = { ... }
def doJsonStuff = {
import net.liftweb.json.JsonDSL._
...
}
}
答案 2 :(得分:0)
通常,解决此类问题的方法是减少导入范围。在这种情况下,您可能不需要在包含net.liftweb.json.JsonDSL._
的范围内使用appendActionsFromXml
。很难说如果没有看到更多的背景,这是否会奏效。