2017-03-05 84 views
1

None用于表示Python中缺少值。Scala中无等价物

例如,对于链表的节点类:

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 

回答

9

斯卡拉但斯卡拉同样是类型,因此这可能是不存在的值必须有类型Option[T]

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

2

其实我也并不认为使用var好在Scala中练习。也许你可以用另一种方式定义/初始化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.isDefinedOption类型不完全是scalaistic