【问题标题】:How can I add a method to an existing function in Julia?如何向 Julia 中的现有函数添加方法?
【发布时间】:2015-03-20 11:51:55
【问题描述】:

所以在 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

这就是我想做的;扩展现有功能以适当地处理新类型。但这会引发错误。这可能吗?

【问题讨论】:

  • 这几乎是一个exact duplicate。我不会投票结束,因为我实际上认为您的问题比链接的问题更清楚(尽管链接问题的答案更彻底)。
  • 谢谢——我没看到

标签: methods julia


【解决方案1】:

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

您必须显式导入一个函数才能扩展它。

这样就可以了:

import Base.push!

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

【讨论】:

  • 或者,您可以拼写这个function Base.push!(…。我个人更喜欢这种风格,因为您可以在函数定义站点上判断您是否正在扩展 Base 方法。否则,您需要扫描整个文件以查找导入语句。
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2018-08-14
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多