Sha256: 1a5005ba6c64a9679646ad46862119043a428775fc31c4131681c135305a3ec4
Contents?: true
Size: 672 Bytes
Versions: 370
Compression:
Stored size: 672 Bytes
Contents
trait BankAccount { def closeAccount(): Unit def getBalance: Option[Int] def incrementBalance(increment: Int): Option[Int] } protected case class Account(var balance: Option[Int] = Some(0)) extends BankAccount { private def runThreadSafe[A](block: => A): A = this.synchronized(block) override def closeAccount(): Unit = runThreadSafe(balance = None) override def getBalance: Option[Int] = runThreadSafe(balance) override def incrementBalance(increment: Int): Option[Int] = runThreadSafe { balance flatMap { amount => balance = Some(amount + increment) balance } } } object Bank { def openAccount(): BankAccount = Account() }
Version data entries
370 entries across 370 versions & 1 rubygems