首页 > 解决方案 > 为什么这个类需要在scala中是抽象的?

问题描述

在 java 和 c# 中,我可以这样写:

class Tree {
 Tree left;
 Tree right;
}

但在斯卡拉:

class Tree{
 val left:Tree
 val right:Tree
}

我需要为类添加抽象,或者写:

val left:Tree=new Tree()

我可以这样写:

trait Tree{
 val left:Tree
 val right:Tree
}

但是为什么如果我使用类,我“必须”和抽象?我不认为这是一个好的设计

谢谢!

标签: scala

解决方案


你可以写的原因

class Tree {
    Tree left;
    Tree right;
}

在 Java 和 C# 中是因为字段null默认初始化为(或 to0等,具体取决于类型)。Scala 的设计者认为这是一个坏主意,您需要初始化它们。所以近似的Scala等价物是

class Tree {
  // note, not val
  var left: Tree = null
  var right: Tree = null
}

这是合法的(但可能不是您真正想要使用的东西)。


推荐阅读