4

我正在 Scala 中编写类,并想编写一些更新方法,这些方法将返回原始对象的修改版本。当然,我希望课程继续保持不变。

当然,我可以通过每次显式创建适当类型的新对象来做到这一点,就像在这个示例中所做的那样,但是在继承方面会中断,因为在子类的实例上调用方法将改为返回超类。

FWIW,我来自 OCaml 的土地,它具有支持功能对象的特殊语法。例如,请参见此处

{< x = y >}那么,Scala在 OCaml中是否有等价物?

4

1 回答 1

5

我不熟悉 ocaml 中“功能对象”的概念,但我认为案例类可能有你需要的东西。对于一个简单的用例,它们提供了一些不错的语法和方便的功能,例如copy

scala> case class Foo(a: Int, b: Int)
defined class Foo

scala> val f = Foo(1, 2)
f: Foo = Foo(1,2)

scala> val g = f.copy(a = 2)
g: Foo = Foo(2,2)

然而,它确实有一些重要的限制(比如缺乏继承)。有关更多信息,请参阅此页面: http ://www.scala-lang.org/old/node/107以及为什么从案例类继承是一个坏主意的主题:案例类继承有什么 *so* 错误?

于 2013-10-11T23:47:40.270 回答