我理解选项是参数化的,即选项[T],但我如何指定嵌套参数化类型,例如Option[Node[T]]
?
我有这个班级定义
class Node[T <: Serializable] private(val path: String, val data: T, val parent: Option[Node[T]] = None) {
...
}
当我将它构造为新的Node[String]("/", "Test", None)
scalac chokes,因为它需要Node [String],而不是Node.type。然后我尝试了
new Node[String](path = "/", data = "Test", parent = None[Node[String]])
但是None不接受参数
有什么想法吗?
答案 0 :(得分:3)
因为有人解释说,没有参数,所以没有总是无,
另一个缺陷是String不是Serializable的子类型,而是java.io.Serializable的子类型:
这很好用:
scala> class Node[T <: java.io.Serializable ] (val path: String, val data: T, val parent: Option[Node[T]] = None) { }
defined class Node
scala> new Node("/", "")
res19: Node[String] = Node@4b520ea8
答案 1 :(得分:0)
你的代码很好:你只需要在Option
中包含一个现值。对于现在和不存在,Some
可以表示为None
或parent = None
。如果您希望缺少值,可以使用以下命令调用:
None
Nothing
不接受参数(因为它代表缺席值),它也是一个对象,即只存在一个实例。但它有一个类型参数Option[Node[T]]
,其中是任何其他类型的子类型,所以它在预期Some
的地方工作得很好。
如果你想要一个值,你必须将它包装在parent = Some(new Node[String]("/", "Test", None))
中,如下所示:
compare-object