我正在從事練習選項和線程的在線練習,兩者都很少有經驗。在線練習附帶一個測試套件,所以現在我正試圖讓我的選項測試用例通過,然後再進入線程測試用例。斯卡拉 - 選項類型變量操作
這裏是我的代碼:
case class BankAccount() {
def getBalance = account.balance
def incrementBalance(amount: Int): Option[Int] = {
account.balance = Some(account.balance.get + amount)
getBalance
}
// def closeAccount(): Option[Int] = {
// account.balance = None: Option[Int]
// }
}
object account {
var balance = Some(0)
}
我有closeAccount()
註釋掉,因爲它目前給我一個錯誤說,它期待型Some[Int] instead of Option[Int]
。考慮到我已初始化balance
可以理解。我不確定如何從Some[Int]
的值變爲None
,如closeAccount()
所示。
任何幫助將不勝感激,在得出這個想法。先謝謝你。
首先編輯:我想出了我用incrementBalance
做出的那個愚蠢的錯誤。由於getBalance
爲val
,因此不會在操作後重新計算該值。儘管如此,仍然輸給了closeAccount()
。
請注意,如果balance爲None,account.balance.get會拋出一個異常(這個調用實質上是殺死了使用Option的目的)。您最好在OptionBalance中使用Option作爲monad,例如,account.balance.map(_ + amount) –
我遇到了問題!之後我重構了我的代碼,使用'case switch'來檢查它是否是'Some [Int]'或'None'。謝謝你的建議,以及:) – lmcphers