2017-03-05 4 views
1

Noneは、Pythonで値が存在しないことを表すために使用されます。ScalaのNoneに相当します。

例えば、連結リストのノードクラス:

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

スカラが、Scalaでは同じが入力され、存在しないことがありますので、値はタイプ実際にOption[T]

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

2

を持たなければならない、私はまた、使用varが良いとは思いませんScalaでの練習。おそらく、変更可能性を避けるために、別の方法でNodeを定義/初期化することができます。

しかし、コードをPythonコードと似ているようにするには、少なくともの場合はnullが問題ありません。 new_dataは、ボックスIntegerを使用する代わりに、タイプIntで初期値に初期化することができます。場合によってnew_dataを初期化する必要がある場合は、@ Sliman Jneidiの答えが示唆しているようにvalue: Option[Int] = Noneを使用する方が良いでしょう。

でも、Pythonではif a is Noneのようなチェックはpythonicです。ただし、Optionタイプに対してif a.isDefinedをチェックするのは、まったくscalaisticではありません。

関連する問題