朱莉娅分配到无效节点



我正在尝试为无效节点分配一个值。为了使代码更易读,我编写了一个getter函数。使用GETTER函数将值分配给节点后,它不起作用。有什么想法?

这是代码:

type Node
    data
    left::Nullable{Node}
    right::Nullable{Node}
    Node() = (x = new(); x.left = Nullable{Node}(); x.right = Nullable{Node}(); x)
    Node(data) = (x = new(); x.data = data; x.left = Nullable{Node}(); x.right = Nullable{Node}(); x)
end
# Helper function to return the left node
getLeft(n::Node) = n.left
n = Node(1)
# This is what I would like to have, however it returns
# "getLeft":
getLeft(n) = Node(-1)
# what works is to write:
n.left = Node(-1)

当然我也试图写:

function getLeft(n::TreeNode)
    return n.left
end

没有任何区别。

我不明白为什么" getleft"函数不允许分配,即使它返回" n. left",而是将分配直接分配到" n. left"。

getLeft(n) = Node(-1)创建一个新功能,可以针对节点以外的任何类型进行编译(因为您为类型节点写了一个更具体的函数: getLeft(n::Node) = n.left
这就是为什么如果您在repl

中键入代码,则应看到getLeft (generic function with 2 methods)

您可能很想写

left = getleft(n)
左=节点(-1)

但这也行不通,第一行创建一个别名 left,是由n.left
指向的对象然后,第二行会创建一个节点,然后将别名left重新分配到该节点,nn.left均未修改

您可以做的是编写一个函数来分配左节点,例如

功能setleft!(n,l)
n.left = l
结束

> setLeft!(n,节点(-1))

但是您可能更喜欢坚持直接分配n. left

最新更新