加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在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")
}

在函数式编程中,创建新状态而不是尝试改变旧状态是很常见的.

创建新状态并返回,就是这样!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读