use*_*285 4 struct scala case-class
所以我刚刚学习了scala案例类,并且我被告知他们习惯于围绕一堆属性提供一个简单的包装器,以便更容易测试相等性.但现在我有两个问题:
首先,struct
C++和struct
C#中的东西是非常不同的东西.所以问一下scala中的case类是否与那两个没有意义的东西相同.
C#中的结构是值类型.当作为参数传递时,它们被深度复制而不是通过指针传递.此行为类似于Java中的基本类型.此行为是C++中的默认行为,使用任何
class
或struct
.
你的第二个问题已在Eric的回答中得到解答,但重要的是C#结构按值完全传递(所有字段都被复制),而Java/C#类通过指针传递(通过值传递).如果您想要完整的解释,请参阅这篇着名的帖子.
不幸的是,目前JVM字节码中没有真正的值类型.每次传递时都不能创建自己完全复制的类型.答案是否定的,案例类不是像C#结构那样的值类型.JVM语言可能会尝试复制值类型的行为,但它将由GC管理并通过指针(通过值传递)传递.
为了给出更直接的答案,不要:
案例类就像常规类,但有一些关键差异.
详细了解他们在此页面.
并不是的.最常见的scala案例类是... scala类.
他们实际上是普通Scala类有一些额外的方法,即获得自动添加到他们-即.copy
类本身并.apply
和.unapply
同伴对象.他们也得到一个很好的.toString
方法,列出所有字段,并且.equals
比较实例成员而不是对象ref.
在大多数其他方面,它们只是常规的scala类.