如何在Scala中使类完全不可变
发布时间:2020-12-16 18:26:48 所属栏目:安全 来源:网络整理
导读:我试图使以下类不可变. 我知道如何做到这一点的理论,但我认为我的实施是错误的.你能帮我吗? 谢谢 可变类: class BankAccount {private var balance = 0def deposit(amount: Int) { if (amount 0) balance += amount}def withdraw(amount: Int): Int =if (0
我试图使以下类不可变.
我知道如何做到这一点的理论,但我认为我的实施是错误的.你能帮我吗? 谢谢 可变类: class BankAccount { private var balance = 0 def deposit(amount: Int) { if (amount > 0) balance += amount } def withdraw(amount: Int): Int = if (0 < amount && amount <= balance) { balance -= amount balance } else { error("insufficient funds") } 不变的阶级 case class BankAccount(b:Int) { private def deposit(amount: Int):BankAccount { if (amount > 0) { return BankAccount(amount) } } private def withdraw(amount: Int): BankAccount ={ if (0 < amount && amount <= balance) { return BankAccount(b-amount) } else { error("insufficient funds") } } } 解决方法
在函数式编程中,您不会更改状态,而是创建新状态并返回它.
以下是使用函数式编程解决用例的方法. case class BankAccount(val money: Int) 上述案例类代表BankAccount 而不是改变状态,创建具有计算值的新状态并将其返回给用户. def deposit(bankAccount: BankAccount,money: Int): BankAccount = { BankAccount(money + backAccount.money) } 以同样的方式,检查资金并创建新状态并将其返回给用户. def withDraw(bankAccount: BankAccount,money: Int): BankAccount = { if (money >= 0 && bankAccount.money >= money) { BankAccount(bankAccount.money - money) } else error("in sufficient funds") } 在函数式编程中,创建新状态而不是尝试改变旧状态是很常见的. 创建新状态并返回,就是这样!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |