aij*_*aij 4 oop ocaml functional-programming scala
我正在Scala中编写类,并希望编写一些更新方法,这些方法将返回原始对象的修改版本.我希望课程继续不变.
当然,我可以通过每次显式创建一个适当类型的新对象来完成它,就像在这个例子中所做的那样,但是在继承面前中断,因为在子类的实例上调用方法将改为返回一个实例超类.
FWIW,我来自OCaml的土地,它具有支持功能对象的特殊语法.有关示例,请参见此处
那么,Scala {< x = y >}
在OCaml中是否具有等价物?
我不熟悉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*继承的错误?
归档时间: |
|
查看次数: |
116 次 |
最近记录: |