【问题标题】:How to initialize empty variables from your own type in Scala?如何在 Scala 中从您自己的类型初始化空变量?
【发布时间】:2012-03-29 22:16:08
【问题描述】:

我的问题是理解 Scala 的语法。我来自 Java 背景。我正在尝试创建一个与它所在的类相同类型的变量。示例:

class Exp {
var exp1: Exp;
}

我收到此错误:

Driver.scala:4: error: class Exp needs to be abstract, since variable exp1 is not defined
(Note that variables need to be initialized to be defined)
    class Exp {

有人可以解释为什么我不能这样做吗?我是语言新手。任何解释都有助于更好地理解它。

【问题讨论】:

    标签: scala syntax


    【解决方案1】:

    因为你需要初始化它。否则编译器会认为你只需要变量的接口:getter 和 setter 方法。这与没有主体的方法是抽象的非常相似。下面会将其初始化为 null,并为您提供一个带有具体变量的有效具体类。

    class Exp {
      var exp1: Exp = _;
    }
    

    这种使用 _ 表示“默认值”,其中引用类型的默认值为 null,非引用类型的默认值为 0、false 或类似的值。

    【讨论】:

    • 我知道 _ 在 Scala 中表示通配符,但是当你这么说时它实际上在做什么?
    • 在关于使用 _ 的答案中添加了更多内容
    • 你的答案是正确的,除了最后一个字non-reference types。 AFAIK scala 中的每个值都是引用类型、布尔值、Int 等。如果我错了,请编辑答案或纠正我。
    【解决方案2】:

    通配符初始化器

    在 Scala 2 中:

    var x: A = _
    

    在 Scala 3 中:

    var x: A = scala.compiletime.uninitialized
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2022-01-13
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多