用反射调用的Scala“operator”方法

时间:2014-12-07 13:21:55

标签: scala reflection

除了标准运算符外,我还有一些像sin,cos等数学方法的特性:+, - ,*。

有没有办法用反射来调用它们?我试着这样做:

def apply(name: String)(args: Expression*) = {
  val im = mirror.reflect(objectReflectionInstance)
  val method = im.symbol.typeSignature.member(TermName(name))
  im.reflectMethod(method.asMethod)(args)
}

lazy val mirror = runtimeMirror(Environment.getClass.getClassLoader)

lazy val objectReflectionInstance = {
  val module = mirror.staticModule("interpreter.Environment")
  mirror.reflectModule(module).instance
}

它适用于“cos”,“sin”但它现在适用于“+”,“*”。我认为这是由scala将下面的方法名称转换为其他内容引起的,但仍然应该有一种“动态”调用它们的方法。

0 个答案:

没有答案