Я работаю над онлайн-упражнениями, использующими опции и темы, оба из которых у меня очень мало опыта. Онлайн-упражнение поставляется с набором тестов, поэтому прямо сейчас я пытаюсь передать свои тестовые варианты Option перед тем, как перейти к тестовым примерам потоков.Scala - Тип опции Var Manipulation
Вот мой код:
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()
.
Обратите внимание, что account.balance.get генерирует исключение, если баланс равен None (этот вызов по сути убивает цель использования опции). Вам лучше использовать опцию в качестве монады в incrementBalance, например, account.balance.map (_ + amount) –
Я столкнулся с проблемой! Впоследствии я реорганизовал мой код, чтобы использовать 'case switch', чтобы проверить, было ли это' Some [Int] 'или' None'. Спасибо, хотя за ваше предложение тоже :) – lmcphers