我很困惑为什么在Scala中使用_ =在Scala中我已经编写了一个程序而没有使用_ =并且使用_ =输出是相同的。 请帮助我解决我的困惑,实际上我是Scala的新手
class BankAccount {
private var _balance = 0
def balance = _balance
def balance(bal:Int) = {_balance=bal}
def deposit(amount:Int): Unit =
{
_balance = amount
}
}
object bank extends App {
val bankAccount = new BankAccount
bankAccount.deposit(1500)
println(bankAccount.balance) //1500
bankAccount.balance(6000)
println(bankAccount.balance) /6000
}
_ =仅命名约定或它起任何作用吗?
答案 0 :(得分:4)
如果您的名称只是balance
,则getter方法会出现命名冲突。即
class BankAccount {
private var balance = 0
def balance = balance //A naming conflict occurs here, as both the def and the variable are called balance.
def balance(bal:Int) = balance = bal //Another conflict,as balance could refer to either the variable or the def
}
作为旁注,你不会(不应该)在scala中真正编写类似的代码。可变变量不是很好,所以理想情况下你会改为使用以下类:
case class BankAccount(balance: Int = 0)
这将使balance
不可变并自动为其生成getter。
val bank = BankAccount(300)
println(bank.balance)
如果你需要它是可变的 - 这不是一个好主意或必要 - 通常你只需创建一个新的BankAccount实例。但是如果你需要它,你可以通过这样做轻松地使它变得可变:
case class BankAccount(var balance: Int = 0)
现在还可以使用平衡器设置器,因此您可以这样做:
val bank = BankAccount(300)
bank.balance = 400
println(bank.balance) //Will print 400
答案 1 :(得分:2)
以下是如何使用代码示例的_=
约定。
private var _balance = 0
def balance:Int = _balance //the getter
def balance_=(bal:Int) {_balance=bal} //the setter
def deposit(amount:Int): Unit = {_balance = amount}
用法:
val bankAccount = new BankAccount
bankAccount.deposit(1500)
println(bankAccount.balance) //1500
bankAccount.balance = 6000 //this is how to use the setter
println(bankAccount.balance) //6000
答案 2 :(得分:0)
是一种惯例。
您可以在以下链接中查看有关命名约定的官方文档。
https://docs.scala-lang.org/style/naming-conventions.html
遵循惯例以确保代码的质量和可操作性非常重要。