scala是否具有功能对象的快捷方式?

aij*_*aij 4 oop ocaml functional-programming scala

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

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

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

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

waf*_*dox 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)
Run Code Online (Sandbox Code Playgroud)

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