【问题标题】:Scala: Initialization of var in classScala:类中 var 的初始化
【发布时间】:2020-05-15 04:33:20
【问题描述】:

我是Scala的初学者,我尝试创建一个类并使用它,该类有变量(var)和一些处理(在def中)。我写的类如下;

class Example() {
    var ExampleVar0 = 0
    var ExampleVar1 = 0

    def ExampleProcessing(_arg0: Int, _arg1: Int) : (Int, Int) = {
        ExampleVar0 = _arg0 + 1
        ExampleVar1 = _arg1 - 1
        (ExampleVar0*2, ExampleVar1/2)
    }
}

我想初始化ExampleVar* 并保留和更新该值。我在其他类中使用该类;

var result0
var result1
val exp = Example()
exp.ExampleProcessing(5, 6)(result0, result1)

result0 和 result1 都为零,var ExampleVar0 = 0 的语句似乎总是写为零。我检查了 var (println(exp.ExampleVar0.toString)) 的值,然后它总是为零。我可能对 var 的初始化有误解。

能否请您指出我的误解在哪里以及如何解决?

【问题讨论】:

  • 它们是原始类型,并且您正在调用方法,需要将方法的结果分配回变量。除非并且直到您更新参考,否则它不会发生变异。 val (newResult0 , newResult1) = exp.ExampleProcessing(5, 6)(result0, result1)
  • 您永远不会分配给result0result1,因此它们将始终具有默认值。
  • 在 Scala 中使用公共/类级别 var 是一种不好的做法

标签: scala


【解决方案1】:

您似乎使用result0result1 作为方法参数,这看起来不正确。试试这个:

val exp = Example()
val (result0, result1) = exp.ExampleProcessing(5, 6)

在这种情况下,var 似乎无关紧要或没有必要,但我会给出通常的警告,即最好避免使用 var 并使用不可变数据结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 2020-11-10
    • 1970-01-01
    • 2023-03-07
    • 2018-04-14
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多