我偶然發現了這個問題:In Scala, how would I model a bank account in a stateless, functional manner?。所提出的解決方案看起來似是而非:Scala中的輔助構造函數問題
// Here is the important part of the answer
class Account(balance: Int) {
def deposit(amount: Int): Account // the implementation was left out...
}
我有這個解決方案的問題是,主構造是公開的。所以如果用戶程序員創建一個新帳戶,他可以傳遞一個任意值給它。如果我總是希望它爲零,該怎麼辦?無論如何,這是一個新帳戶,爲什麼它的數量不是零?
據我所知,使用專用主構造函數製作公共類是不可能的。另一方面,輔助構造函數可能是專用,這正是我試圖做的。
class Account {
val balance = 0
private def this(amount: Int) = {
this()
balance = amount // won't compile since balance is a val
}
def deposit(amount: Int): Account = new Account(balance + amount)
}
我知道問題是什麼,但我不知道如何解決它,這是有點尷尬......
可能有[Private and protected co在斯卡拉nstructor](http://stackoverflow.com/questions/1730536/private-and-protected-constructor-in-scala) – oluies
@oluies - 這是*不*一個重複。對於相同的答案,這是一個不同的問題。 – Malvolio