scala - 为什么这个类需要在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
}
但是为什么如果我使用类,我“必须”和抽象?我不认为这是一个好的设计
谢谢!
解决方案
你可以写的原因
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
}
这是合法的(但可能不是您真正想要使用的东西)。
推荐阅读
- angular - 我如何在具有特定内容类型的 Angular 中发布请求
- image-processing - GraphicsMagick 水印
- amazon-web-services - 如何在 Elastic Load Balancer 上增加 60 秒超时问题?
- r - R:将文本值从数据框的一个单元格复制到另一个数据框的另一个单元格
- c# - 使用 c# 执行 oracle 存储过程会引发错误 ORA-06502: PL/SQL: numeric or value error\nORA-06512
- react-native - 打开键盘时使 react-native-autocomplete-input 可见
- javascript - 画布转换为白色背景的 JPG
- amazon-web-services - AWS 机密管理器,轮换机密时“先前的轮换未完成”
- raspberry-pi3 - UART 和 TCP (RPi) 之间的 socat 双向转发
- python - 从 Django 中的 url 获取 pk