有谁知道 Scala 的全功能反射 API 的状态吗?
我知道您可以使用 Java 的反射 API 来做简单的事情,但这不适用于 Scala 的语言功能。我找到了一个有趣的文章 http://lamp.epfl.ch/teaching/projects/archive/coppel_report.pdf描述了一个实验性的 Scala 镜像 API,但据我所知,这仍然是实验性的。我还发现提到了 ScalaSigParser,但这似乎是相当低的级别。
这比其他任何事情都更令人好奇,因为我目前只是在玩 Scala。我认为这个问题的答案可能对其他对 Scala 感兴趣的人也有用。
“JavaBean 样式模式的不可变替代”可以用命名参数和可选的 @BeanProperty 注释来表示:
import reflect._
case class A(@BeanProperty val x: String, @BeanProperty val y : Int)
A(x = "s", y = 3)
A(y = 3, x = "s")
仅当客户端了解新方法并且可以针对接口进行编译时,添加方法(更准确地说:定义新接口)在静态类型语言中才有意义。通过结构类型,客户端可以定义他们期望出现在对象中的方法。 Scala 编译器会将结构类型转换为反射代码,这可能会在运行时失败。
type T = {def go(x : Int): Int }
def y(any : Any) = any.asInstanceOf[T].go(2)
class A{
def go(x : Int) = x + 1
}
y(new A())
y(new {}) //this will fail
您可以使用以下命令定义新的类或特征口译员 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/compiler/scala/tools/nsc/Interpreter.scala在飞行中。 Interpret 方法将 Scala 代码转换为字节代码。
你已经提到过Scala SigParser https://stackoverflow.com/questions/1833762/scala-reflection-getdeclaringtrait/1838870#1838870这并不容易使用。
我认为您喜欢的其他功能还没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)