Scala 2.10带来了除了提供JVM(或者我猜CLR)之外的反射.
我们还有什么特别值得期待的,它将如何在平台上得到改善?
例如,是否会有一个类反映语言在字段和访问器方法之间的可转换性,以便我可以迭代对象的属性?
Von*_*onC 14
更新2012-07-04:
Daniel SOBRAL(也在SO上)详细介绍了他的博客文章" Scala中带有反射的JSON序列化!第1部分 - 所以你想做反思吗? "一些反映的功能:
概括来说,Scala 2.10将附带一个Scala反射库.
该库由编译器本身使用,但通过蛋糕模式分为多个层,因此不同的用户可以看到不同级别的细节,保持jar大小足以满足每个人的使用需求,并希望隐藏不需要的细节.反射库还集成了即将推出的宏设施,使有进取心的编码人员能够在编译时操作代码.
更新2012-06-14.(来自Eugene Burmako):
在Scala 2.10.0-M4中,我们发布了新的反射API,它最有可能在没有重大变化的情况下进入2.10.0-final.
可以找到有关API的更多详细信息:
摘录:
Universe和镜像现在是独立的实体:
- Universes主持反射工件(树,符号,类型等),
- 镜像抽象加载那些工件(例如
JavaMirror使用类加载器和注释unpickler加载东西,而GlobalMirror使用内部编译器classreader来实现相同的目标).公共反射API分为
scala.reflect.base和scala.reflect.api.
- 前者表示一个简约的快照,足以构建具体化的树和类型.
- 要构建,而不是分析 - 实现智能的一切(例如,获取类型签名)
scala.reflect.api.两个反射域都有自己的宇宙:
scala.reflect.basis和scala.reflect.runtime.universe.
- 前者超轻量级,不涉及任何类加载器,
- 而后者代表一个精简的编译器.
最初的答案,2011年9月:
您可以在Scala GitHub存储库中看到反射包的演变,这两个最近的提交:
(根据这个帖子,Liftcode 旨在简化"编写代码编写代码")
该类scala/reflect/internal/Importers.scala(昨天创建!)是使用这些最新反射功能的一个很好的例子.
使用当前的2.10M4,您已经可以迭代一个类的成员:
reflect.runtime.universe.typeOf[MyClass].members.filter(!_.isMethod)
Run Code Online (Sandbox Code Playgroud)
上面的代码列出了Symbol表示MyClass不是方法的类成员的对象.有很多方法可以对此进行微调.
| 归档时间: |
|
| 查看次数: |
3611 次 |
| 最近记录: |