代码之家  ›  专栏  ›  技术社区  ›  Tristan Rhodes

F#树拼图-找不到值或构造函数“TreeNode”

  •  1
  • Tristan Rhodes  · 技术社区  · 11 年前

    这是一个初学者的问题,因为我仍然在弄清楚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,[])])
    

    我得到的错误是 树节点 (1,[TreeNode(2,[])])。当嵌套的TreeNode用法正确地显示了类型并且没有任何构造函数问题时,我不明白为什么这会导致问题,我也可以将此类型用作方法参数。

    希望有人能对这一点有所了解,因为我缺少一些重要的洞察力。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Alexander R Milind    11 年前

    这不起作用的原因是 TreeNode 是类型,而不是构造函数。您已定义类型 树节点 只有一个联合案例 N 。为了创建受歧视工会的值,必须使用其中一个工会案例的名称。在本例中,只有一个可以使用- N :

    let test = N(1, [N(2, [])])
    

    可以找到有关工会的更多信息 here .