Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Methods 如何向Julia中的现有函数添加方法?_Methods_Julia - Fatal编程技术网

Methods 如何向Julia中的现有函数添加方法?

Methods 如何向Julia中的现有函数添加方法?,methods,julia,Methods,Julia,所以在Julia中,每个函数都有方法 以下是有意义的: f(x, y) = x + y f(x) = x + 2 这提供了两种附加到此函数的方法 但假设我想向现有的Julia函数添加一个方法,而不是重写它 例如: a = [2, 3] push!(a, 4) a == [2, 3, 4] # true type Node children :: Array{Node} end function push!(base :: Node, child :: Node) push!(b

所以在Julia中,每个函数都有方法

以下是有意义的:

f(x, y) = x + y
f(x) = x + 2
这提供了两种附加到此函数的方法

但假设我想向现有的Julia函数添加一个方法,而不是重写它

例如:

a = [2, 3]
push!(a, 4)
a == [2, 3, 4] # true

type Node
   children :: Array{Node}
end

function push!(base :: Node, child :: Node)
   push!(base.children, child)
end

这就是我想做的;扩展现有函数以适当地处理新类型。但这是一个错误。这可能吗?

我刚刚解决了这个问题,所以我想还是把这个问题贴出来,以防人们将来遇到麻烦

为了扩展函数,必须显式导入函数

因此,这将起作用:

import Base.push!

function push!(base :: Node, child :: Node)
   push!(base.children, child)
end

这几乎是一个错误。不过我不打算投票结束,因为我实际上认为你的问题比链接问题清楚得多(虽然链接问题的答案要彻底得多)。谢谢——我没有看到。或者,你可以拼写这个
function Base.push!(…
。我个人更喜欢这种风格,因为您可以在函数定义站点判断是否扩展了基本方法。否则,您需要扫描整个文件以获取导入语句。