Scala中等效的无效

时间:2017-03-05 02:12:14

标签: scala python-3.x nonetype

None用于表示Python中缺少值。

例如,链接列表的节点类:

class Node:
    def __init__(self, data=None, next_node=None):
        self.data = data
        self.next_node = next_node

Scala有没有办法做到这一点?我试过null,但有些消息来源建议不要使用它。

class Node(new_data: Integer = null, new_next_node: Node = null) {
        var data = new_data
        var next_node = new_next_node

2 个答案:

答案 0 :(得分:9)

在Scala中也是如此,但输入了Scala,因此可能缺少的值必须具有类型Option[T]

case class Node(value: Option[Int] = None, node: Option[Node] = None)

答案 1 :(得分:2)

事实上,我也不认为在Scala中使用var是一种很好的做法。也许你可以用另一种方式定义/初始化Node以避免可变性。

但是如果你想让代码与Python代码保持相似,null至少对new_next_node来说是好的。 new_data可以使用Int类型初始化为某个默认值,而不是使用框Integer;如果new_data应该按案例初始化,最好使用value: Option[Int] = None作为@Sleiman Jneidi的答案建议。

但请记住,在Python中,像if a is None这样的检查是 pythonic ;但是,针对if a.isDefined类型检查Option并不完全 scalaistic