Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 需要帮助来修复代码中的一个问题_Scala - Fatal编程技术网

Scala 需要帮助来修复代码中的一个问题

Scala 需要帮助来修复代码中的一个问题,scala,Scala,我已经为测试目的编写了一些小代码。但这是一个错误。但不知道为什么? 有人能帮我吗 class JointAccount (val balance: Long) { def displayBalance = println(balance) def withDrawl(amt: Int) = { balance -=amt } def deposit(amt: Int) = { balance -=amt } } 错误是 错误:';'预期def但发现def取款(金额:

我已经为测试目的编写了一些小代码。但这是一个错误。但不知道为什么? 有人能帮我吗

class JointAccount (val balance: Long) {

 def displayBalance = println(balance)

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

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

错误:';'预期def但发现def取款(金额:整数)={


提前感谢。

您正试图修改一个不可变变量(
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)

您可以在这里玩它

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最佳实践建议避免返回
单元的可变变量和函数。以下是代码的重新编写版本示例:

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中,类中的函数最好返回一个数字(在您的情况下)或一个具有更新值的新类。

语法正确吗?为什么有这些
**
?嗨,这个程序中没有**。可能是自动生成的。我强烈建议您首先阅读一本基础教程(
val
是不可变的,没有为函数定义返回类型,无用的
,…)。错误是什么-请将它添加到问题中。我认为
存款
应该是
余额+=amt
(如果
余额
当然是
var
)谢谢你的帮助。我已经尝试了val和var。但是,它是错误的。你是如何尝试的?上面的代码编译并打印结果。我在谈论我的代码时发现了错误。CanThanks James为我提供了解决方案和有价值的建议