2017-03-05 98 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