1

我正在做一个练习选项和线程的在线练习,我对这两个方面的经验都很少。在线练习附带了一个测试套件,所以现在我正在尝试让我的 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()注释掉了,因为它目前给我一个错误,说它期待 type Some[Int] instead of Option[Int]。考虑到我是如何初始化的,这是可以理解的balance。我不确定如何从中看到的值Some[Int]变为。NonecloseAccount()

任何帮助将不胜感激。先感谢您。

第一次编辑:我弄清楚我犯了什么愚蠢的错误incrementBalance。由于getBalance是 a val,因此它不会在操作后重新计算值。不过还是迷路了closeAccount()

4

1 回答 1

3

var balance = Some(0)被推断为 type Some[Int],当您需要明确告诉它它是 type 时Option[Int]

var balance: Option[Int] = Some(0)

然后balance将能够接受Some(0)None

顺便说一句,有时总是使用Option(...)而不是Some(...). 这是因为Some(null)将成为Some(null)Option(null)将成为None我们通常想要的。

于 2015-06-23T15:52:38.147 回答