Ho un metodo che estrae oggetti-azione da un nodo xml:
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)
}
}
}
Tuttavia, poiché ho importato import net.liftweb.json.JsonDSL._ nella stessa classe, ottengo un'ambiguità quando estraggo l'attributo "@key" da x:
[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
Come posso risolvere questa ambiguità in questo metodo perticolare?
risposte:
0 per risposta № 1Prova questo:
val key: String = x "@key" text
val value: String = x "@value" text
0 per risposta № 2
Se possibile, sposta l'importazione JsonDSL (o al contrario l'importazione XML) in un ambito più piccolo.
class A {
def doXmlStuff = { ... }
def doJsonStuff = {
import net.liftweb.json.JsonDSL._
...
}
}
0 per risposta № 3
Di solito il modo per risolvere questo tipo di problema è ridurre l'ambito dell'importazione. In questo caso forse non è necessario net.liftweb.json.JsonDSL._
nell'ambito nell'ambito che racchiude appendActionsFromXml
. Difficile dire se funzionerebbe senza vedere più contesto.