[英]Scala/IntelliJ: case object X vs case class X vs case class X()
Scala中有案例类:
case class X(one: One, two: two)
有些案例对象只有一个实例(这很有意义):
case object X
当我声明不带参数的case类时,IntelliJ做正确的事并弃用警告我使其成为case对象:
case class X // deprecated stuff
但是它并没有警告我
case class X()
这使我想知道case class X
和case class X()
之间是否有区别?
我不知道您使用的是什么Scala版本,但是在2.11中,这不仅被弃用,而且确实是一个错误:
Error:(34, 17) case classes without a parameter list are not allowed;
use either case objects or case classes with an explicit `()'
as a parameter list.
case class Foo
^
简而言之,您无法针对无参数列表案例类进行模式匹配,因此它们没有用。
case class Foo()
def test(in: Any) = in match {
case Foo() => "foo"
case _ => "other"
}
声明案例对象时,只会创建一个实例。 但是,无参数案例类可以有多个不同的实例。 为什么您会想要那是另一回事。
原则上, case class Foo
和case class Foo()
之间没有区别。 我认为前者已被弃用,因为不经意间滥用它很容易。 这篇文章很好地说明了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.