【发布时间】:2013-07-12 09:24:57
【问题描述】:
我已经动态定义了一个 Scala 类,但是为了“正确”使用它,它需要一个 ScalaSig。
那么,我如何在正常编译之外生成 ScalaSig?也许来自一棵树?也许像:
val tb = runtimeMirror(getClass.getClassLoader).mkToolBox()
val classDef = """class MyRecord(x: String)"""
val tree = showRaw(tb.parse(classDef))
但是pickler是从哪里来的呢?
感谢您的建议 -朱利安
【问题讨论】:
-
您是否考虑过使用工具箱来定义一个类?然后它会自动生成必要的签名。
-
嗨 Eugene,是的,但是类定义发生在运行时。我认为工具箱只能在编译时工作是否正确?我能告诉你我对类型宏有多兴奋吗!?
-
工具箱在运行时工作。这个拉取请求允许他们定义公开可见的类:github.com/scala/scala/pull/2662,但它适用于 2.11。同时,在 2.10 中您可以使用gist.github.com/xeno-by/5845539。如果有什么问题,请告诉我。
-
类型宏很酷,但不幸的是它们不会出现在 2.11 中:scalamacros.org/paperstalks/…。它们可能会在之后的某个时候以宏注释的形式实现(可能在 2.12 中?)。
-
尽管如此,2.10.x 中已经有一个非常酷的类型宏模拟:meta.plasm.us/posts/2013/07/11/fake-type-providers-part-2。看看吧,说不定会有用。
标签: scala metaprogramming dynamic-programming scalac