参数化选项类型

时间:2016-03-15 20:48:59

标签: scala

我理解选项是参数化的,即选项[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不接受参数

有什么想法吗?

2 个答案:

答案 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可以表示为Noneparent = None 。如果您希望缺少值,可以使用以下命令调用:

None

Nothing不接受参数(因为它代表缺席值),它也是一个对象,即只存在一个实例。但它有一个类型参数Option[Node[T]],其中是任何其他类型的子类型,所以它在预期Some的地方工作得很好。

如果你想要一个值,你必须将它包装在parent = Some(new Node[String]("/", "Test", None)) 中,如下所示:

compare-object