【发布时间】:2019-12-29 17:40:18
【问题描述】:
我需要编写一个返回类型为NodeSeq (scala.xml.NodeSeq)的函数,
在下面的函数中,我试图通过使用下面的代码评估表达式来获取 XML 文件的 NodeSeq。编译器抛出类型不匹配错误。
import scala.reflect.runtime.universe
def someFunc(params): NodeSeq = {
some code
....
val evaluator = universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
val data: NodeSeq = evaluator.eval(evaluator.parse(expression)) // return type - Any
if(data.getClass.getName == scala.xml.NodeSeq) data else NodeSeq.Empty
}
val 数据 理想情况下应该包含 NodeSeq(来自我拥有的数据),但我正在评估一个表达式,表达式的返回类型可以是任何东西,
我明白了,为什么我不能使用上面的代码返回 NodeSeq,
我能想到的最好的就是最后一个 if 条件。
有什么办法可以将此函数的返回类型从 Any 更改为 NodeSeq?
【问题讨论】:
-
尝试使用pattern matching 而不是检查类名。当然,您不应该将 String 与 Class 进行比较:它是不同的类型。
-
感谢@MikhailIonkin,我现在可以更改返回类型了。另外,您能否将其发布为答案,以便我接受您的解决方案并关闭此问题。
-
好的,我贴出来了。
标签: xml scala return-type scala-reflect