我发现自己编写了很多(某种)样板代码。例如说我有以下特征
trait Foo {
def x: Int
}
trait Bar {
def y: Boolean
def z: String
}
然后我想要一个案例类,它的作用只不过是实现这些。
case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar
这看起来并不烦人,但现在想象一下我的特质有十几个def
s 每个并且名称x
, y
, and z
更长。写出案例类意味着我必须将所有这些重写为MyClass
.
有没有办法生成x: Int, y: Boolean, z: String
构造函数部分自动基于我扩展的特征?
我认为你正在寻找的是注释宏 http://docs.scala-lang.org/overviews/macros/annotations.html可以为您处理这项工作。然后,您可以通过编写如下内容来调用该宏:
@FieldsFromTraits
case class MyClass extends Foo with Bar
然后,注释宏可以使用特征中的信息重写您的案例类。
做类似事情的图书馆是MetaRest https://github.com/pathikrit/metarest。您可以尝试调整该实现。我看看今晚能不能把一些东西放在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)