带括号和不带括号的案例类之间的区别

Ayo*_*ari 0 scala case-class

我有一个案例类case class FOO。并想测试一个myMethod返回FOO()给定参数值的方法value1

我有一个像 : 的测试myMethod(value1) should equal FOO

测试失败FOO did not equal FOO()

FOO和 和有FOO()什么区别?

Jas*_*r-M 6

一个case class Foo()desugars成等价的东西

class Foo() extends Product with Serializable {
  // some methods
}

object Foo extends (() => Foo) with Serializable {
  // some methods
}
Run Code Online (Sandbox Code Playgroud)

所以Foo()创建一个 Foo 类的实例,而它Foo是对 Foo 伴随对象的引用。

但是,如果您的案例类Foo没有参数,您应该考虑将其设为案例对象。如果您没有滥用具有内部可变状态 [1] 的案例类,则Foo()无论如何所有实例都应该是无法区分的。

[1] 如果是,请考虑改用常规课程。