gpt4 book ai didi

oop - scala 有功能对象的快捷方式吗?

转载 作者:行者123 更新时间:2023-12-05 01:06:59 25 4
gpt4 key购买 nike

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

当然,我可以通过每次显式创建一个适当类型的新对象来实现,就像在 this example 中所做的那样。 ,但是这在继承面前会中断,因为在子类的实例上调用方法将返回父类(super class)的实例。

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

那么,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)

然而,它确实有一些重要的限制(比如缺乏继承)。查看此页面了解更多信息: http://www.scala-lang.org/old/node/107和这个线程为什么从案例类继承是一个坏主意: What is *so* wrong with case class inheritance?

关于oop - scala 有功能对象的快捷方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com