82
A
回答
151
重載構造函數是不是特別的情況下類:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
但是,您可能喜歡也超載在同伴的對象,當你忽略new
這就是所謂的apply
方法。
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
在Scala 2.8中,通常可以使用命名參數和默認參數來代替重載。
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
17
您可以按照常規方式定義重載構造函數,但要調用它,必須使用「new」關鍵字。
scala> case class A(i: Int) { def this(s: String) = this(s.toInt) }
defined class A
scala> A(1)
res0: A = A(1)
scala> A("2")
<console>:8: error: type mismatch;
found : java.lang.String("2")
required: Int
A("2")
^
scala> new A("2")
res2: A = A(2)
+2
這並不完全正確 - 你可以在同伴對象聲明爲正常 – 2010-03-08 12:57:20
相關問題
- 1. Scala案例類私有構造函數不是私有的
- 2. 是否可以引用Scala案例類構造函數參數的類型?
- 3. 例外的C++重載構造函數
- 4. 重載子類的構造函數
- 5. 構造函數重載和類參數
- 6. JavaScript的使用案例構造函數
- 7. 重載構造映射構造函數
- 8. 重載庫類構造函數
- 9. Scala:調用超類的構造函數
- 10. Scala:定義案例類構造函數時出現「override protected val」錯誤
- 11. 案例類的構造函數參數給出的元組
- 12. C#構造函數重載
- 13. 構造函數重載
- 14. C#構造函數重載
- 15. 構造函數重載
- 16. 轉換案例類構造函數的參數在斯卡拉
- 17. Scala數組構造函數?
- 18. 基於scala條件的重載構造函數
- 19. 如何重構這些重載的類構造函數? (C#)
- 20. 如何在構造函數初始化父案例類參數
- 21. Scala輔助構造函數
- 22. Scala - 分解構造函數
- 23. 爲什麼DomainService構造函數重載顯示爲DomainContext構造函數重載?
- 24. 是否有可能在scala中重載構造函數?
- 25. 構造函數重載。得到錯誤的解決方案
- 26. c#構造函數注入和構造函數重載
- 27. 構造函數和構造函數重載
- 28. 重載構造函數根據輸入類型調用其他構造函數
- 29. 可以子類的構造方法重載超類的構造函數? 「java」
- 30. 重載結構構造函數
很不錯的:)我一直在尋找的東西像斯卡拉後備值,它與2.8新?我不知道:) – Felix 2010-03-10 14:23:39
是的,命名參數和默認參數在Scala 2.8中是新的。 – retronym 2010-03-10 22:17:00
Martin Odersky解釋了爲什麼不會自動添加其他應用方法:http://www.scala-lang.org/node/976 – 2010-04-15 12:56:43