нужна помощь, чтобы исправить одну из проблем в моем коде - PullRequest
0 голосов
/ 14 октября 2019

Я написал небольшой код для тестирования. Но это дает ошибку. Но не уверен почему? Может ли кто-нибудь помочь мне в этом.

class JointAccount (val balance: Long) {

 def displayBalance = println(balance)

 def withDrawl(amt: Int) = {
   balance -=amt
 }

 def deposit(amt: Int) = {
   balance -=amt
 }
}

Ошибка

ошибка: ';'ожидается, но def нашел def withDrawl (amt: Int) = {

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

val -> var

Кроме того, ваши функции пополнения и снятия средств делают то же самое, поэтому я установил, что

class JointAccount (var balance: Long) {

 def displayBalance = println(balance)

 def withDrawl(amt: Int) = {
   balance -=amt
 }

 def deposit(amt: Int) = {
   balance +=amt
 }
}

val x = new JointAccount(123L)

x.deposit(4)
x.displayBalance

Смотрите, как работает вживуюздесь

Я должен сказать, что это очень Java, а вовсе не Scala, с точки зрения того, как вы решили его реализовать. Лучшие практики Scala рекомендуют избегать изменчивых переменных и функций, которые возвращают Unit. Вот пример переписанной версии вашего кода:

case class JointAccount (balance: Long) {
 def withDrawl(amt: Int) = this.copy(balance = balance - amt)

 def deposit(amt: Int) = this.copy(balance = balance + amt)
 // alternative: def deposit(amt: Int) = JointAccount(balance + amt)
}

def displayBalance(ja: JointAccount) = println(ja.balance)

val x = JointAccount(123L)

displayBalance(x.deposit(4))

Посмотрите, как это работает вживую здесь

В Scala гораздо лучше иметь функции внутри классалибо верните число (в вашем случае), либо новый класс с обновленным значением.

0 голосов
/ 14 октября 2019

Вы пытались изменить неизменяемую переменную (balance), как сказал вам cchantep.

Вот тривиальный пример, который может помочь вам начать:

// Start writing your ScalaFiddle code here
case class JointAccount (balance: Long) {
  def displayBalance = println(balance)
  def withDrawl(amt: Int) = JointAccount(balance - amt)
  def deposit(amt: Int) = JointAccount(balance + amt)
}

val a = JointAccount(1000)

println(a)
a.displayBalance
val b = (a withDrawl 500) deposit 500
println(b)

Вы можете игратьс этим здесь https://scalafiddle.io/sf/f8Usa20/5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...