如何在Julia中为现有函数添加方法?

Kit*_*tes 3 methods julia

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

以下是有道理的:

f(x, y) = x + y
f(x) = x + 2
Run Code Online (Sandbox Code Playgroud)

这提供了两个附加到此功能的方法.

但是,假设我想在现有的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
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的; 扩展现有功能以适应新类型.但这会引发错误.这可能吗?

Kit*_*tes 5

我刚解决了,所以我想仍然发布这个问题,万一人们将来遇到麻烦.

您必须显式导入函数才能扩展它.

这样可行:

import Base.push!

function push!(base :: Node, child :: Node)
   push!(base.children, child)
end
Run Code Online (Sandbox Code Playgroud)

  • 或者,你可以拼写这个`函数Base.push!(...`.我个人更喜欢这种风格,因为你可以在功能定义网站告诉你是否扩展Base方法.否则,你需要扫描通过整个文件获取import语句. (2认同)