Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala案例类和构造函数_Scala - Fatal编程技术网

Scala案例类和构造函数

Scala案例类和构造函数,scala,Scala,我发现自己写了很多样板代码。比如说我有以下特点 trait Foo { def x: Int } trait Bar { def y: Boolean def z: String } 然后我想要一个case类,它不多也不少地实现这些 case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar 这看起来并不烦人,但现在想象一下,我的特征每个都有十几个defs,并且名称x、y、和z要长得多。写出cas

我发现自己写了很多样板代码。比如说我有以下特点

trait Foo {
  def x: Int
}

trait Bar {
  def y: Boolean
  def z: String
}
然后我想要一个case类,它不多也不少地实现这些

case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar
这看起来并不烦人,但现在想象一下,我的特征每个都有十几个
def
s,并且名称
x
y
、和
z
要长得多。写出case类意味着我必须将所有这些都重写为
MyClass
的参数


有没有一种方法可以根据我扩展的特性自动生成
x:Int,y:Boolean,z:String
构造函数部分?

我想你要找的是一个可以为你处理这项工作的。然后,您可以通过以下方式调用此宏:

@FieldsFromTraits
case class MyClass extends Foo with Bar
然后,注释宏可以使用traits中的信息重写case类


做类似事情的库是。您可以尝试调整该实现。我来看看今晚是否有什么东西不能放在一起。

好吧,您可以使用案例类中的def覆盖def。在这种情况下,您不必首先生成这些VAL。您的trait的所有实现是否都有其def的val实现?如果是这样的话,那么为什么一开始就把它作为def而不是val呢?@tkachuko假设我确实到处都是
val
,而不是
def
,这有什么帮助呢?它有助于进入您试图解决的上下文。你需要某种宏工具:你检查过这里提到的库了吗?哇!这正是我所想的。我想我要尝试一下这个实现。