我正在进行练习选项和线程的在线练习,这两点我都很少有经验。在线练习附带一个测试套件,所以现在我试图让我的Option测试用例在我进入线程测试用例之前通过。
这是我的代码:
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()
。
任何帮助都会在获得这个问题时受到赞赏。提前谢谢。
First Edit:我弄清楚我用incrementBalance
犯了什么愚蠢的错误。由于getBalance
是val
,因此在操作后不会重新计算该值。但仍然遗失在closeAccount()
上。
答案 0 :(得分:3)
var balance = Some(0)
被推断为Some[Int]
类型,当您需要明确告诉它类型为Option[Int]
时:
var balance: Option[Int] = Some(0)
然后balance
将能够接收Some(0)
或None
。
顺便说一句,总是使用Option(...)
代替Some(...)
是一种好习惯。这是因为Some(null)
将成为Some(null)
,而Option(null)
将成为None
这是我们通常想要的。