case class 带括号和不带括号的区别

Difference between case class with parentheses and without

我有一个案例classcase class FOO。并想测试一个方法 myMethod returns FOO() 给定参数值 value1.

我有这样的测试:myMethod(value1) should equal FOO

测试失败 FOO did not equal FOO()

FOOFOO() 和有什么不一样?

A case class Foo() 脱糖成等同于

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

object Foo extends (() => Foo) with Serializable {
  // some methods
}

因此 Foo() 创建了 Foo 的实例 class 而 Foo 是对 Foo 伴生对象的引用。

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

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