【发布时间】:2015-06-23 15:38:52
【问题描述】:
我正在做一个在线练习来练习选项和线程,我对这两个方面的经验都很少。在线练习附带了一个测试套件,所以现在我正在尝试让我的 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() 所示。
如果能解决这个问题,我们将不胜感激。提前谢谢你。
第一次编辑:我发现我在使用incrementBalance 时犯了什么愚蠢的错误。由于getBalance 是val,因此它不会在操作后重新计算值。不过在closeAccount() 上仍然迷路。
【问题讨论】:
-
请注意,如果 balance 为 None,account.balance.get 将抛出异常(此调用本质上会扼杀使用 Option 的目的)。您最好将 Option 用作 incrementBalance 中的 monad,例如 account.balance.map(_ + amount)
-
我确实遇到了这个问题!我后来重构了我的代码,使用
case switch来检查它是Some[Int]还是None。不过也谢谢你的建议:)
标签: scala scala-option