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
答案 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 。