2013-10-11 53 views
4

我在Scala編寫類,想寫一些更新方法,將返回原始對象的修改版本。我希望這個班級繼續是不變的,當然。scala是否有功能對象的快捷方式?

當然,我可以通過每次明確地創建一個適當類型的新對象來做到這一點,就像在this example中做的那樣,然而,由於調用子類的實例上的方法而不是返回超類的一個實例。

FWIW,我來自OCaml的土地,它有特殊的語法來支持功能對象。有關示例,請參閱here

那麼,Scala是否在OCaml中具有與{< x = y >}等效的值?

回答

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和這個線程爲什麼從案例類繼承是一個糟糕的主意:What is *so* wrong with case class inheritance?

+0

它有點像感覺混合兩件事,但我想它是最接近的在斯卡拉。 – aij

相關問題