这是一个初学者的问题,因为我仍然在弄清楚F#编译器错误的含义以及如何修复它们。
我有以下F#代码 - 并且无法理解为什么它不起作用。它基于此处的解决方案:F#: Recursive collect and filter over N-ary Tree
module TreeProblem_Solution1 =
type TreeNode =
| N of int * TreeNode list
let rec filterTree (t : TreeNode) (predicate : int -> bool) =
()
let test =
TreeNode(1,[TreeNode(2,[])])
我得到的错误是在 TreeNode (1,[TreeNode(2,[])])下。我不明白为什么这会导致问题,当嵌套的TreeNode用法正确显示类型并且没有任何构造函数问题时,我也可以使用此类型作为方法参数。
希望有人可以对此有所了解,因为我缺少一些重要的见解。
答案 0 :(得分:3)
这不起作用的原因是TreeNode
是一个类型,而不是构造函数。您已使用名为TreeNode
的单个联合案例定义了类型N
。要创建Discriminated Union的值,您必须使用其中一个联合案例的名称。在此示例中,只有一个要使用 - N
:
let test = N(1, [N(2, [])])
有关工会的更多信息,请here。