iro*_*ght 23 annotations scala
.NET中的属性是一个非常受欢迎的功能.并且在1.5 Annotations到处使用后,Java添加了Annotation,请参阅Java EE和Spring.但是很少有scala库使用注释.lift-json不要使用它.电梯记录不使用它.Squeryl不使用它.subcut不使用它.(它有编译器插件的注释)...只是命名了一些.
他们只在需要一些编译魔术时才使用注释.@tailrec,@ inline,@ BundProperty,@ Inject(在subcut中)......
Scala具有超灵活的类型系统,特性,隐式和Menifest [X].那么他们不需要运行时元数据?
是否有任何scala项目大量使用注释?
ps我认为动态应该是注释而不是特性.
jsu*_*eth 28
一般来说,我们不使用注释,因为我们并不需要很多东西.
我见过的几个地方使用了注释:
@inline或@tailrec.在Scala中,我们并不需要依赖注入框架,因为有几种方法可以执行不需要外部工具的依赖注入.您可以将DI配置与核心代码分开,但仍然使用Scala编写.请参阅:https: //github.com/jsuereth/scala-in-depth-source/blob/master/chapter11/src/main/scala/scalax/config/Test.scala
所以基本的答案是,注释没有任何问题,我们通常(还)不需要它们.
Dav*_*ker 13
对我来说,这通常是编译器强制类型安全的问题.看看Squeryl以及它与Hibernate等Java ORM的区别.Hibernate将使用@Id注释来表示主键,在Squeryl中,您将创建一个id成员,该成员由KeyedEntity特征指定.需要具有主键的实体(例如,更新和删除)的方法将在编译时大声崩溃(如果尚未定义).Squeryl中还有其他几个地方,其中类型安全构造取代了集合映射和日期/时间处理等注释.
我认为这是Scala社区中常见的思维方式.注释更多是运行时功能,并没有得到充分考虑.Scala编译器功能非常强大,可以将更多代码推送到可以验证的构造中,这对于那些愿意接受随之而来的复杂性的人来说是有意义的.