【问题标题】:F# Tree Puzzle - Value or constructor "TreeNode" is not foundF# 树拼图 - 未找到值或构造函数“TreeNode”
【发布时间】:2014-02-08 15:32:55
【问题描述】:

这是一个初学者问题,因为我仍在弄清楚 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 使用正确显示类型并且没有任何构造函数问题时,我也可以将此类型用作方法参数。

希望有人可以对此有所了解,因为我缺少一些重要的见解。

【问题讨论】:

    标签: f# compiler-errors tree discriminated-union


    【解决方案1】:

    这不起作用的原因是TreeNode 是一种类型,而不是构造函数。您已经定义了一个类型 TreeNode 和一个名为 N 的联合案例。为了创建有区别的联合的值,您必须使用其中一个联合案例的名称。在这个例子中,只有一个可以使用 - N:

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

    更多关于工会的信息可以在here找到。

    【讨论】:

    • 可区分联合的值也可以通过它们的类型来限定:let test = TreeNode.N(1, [TreeNode.N(2, [])])
    • Arg!太明显了!谢谢。这就像回到 C# 的“这是一个函数,这是一个类”阶段。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2012-03-27
    • 2021-06-14
    相关资源
    最近更新 更多