外部模块的参考功能



我编写了一个数字代码来解决两个密切相关的问题。以下代码结构对我来说似乎很好:

module Problems
common_function(i) = println("Solving problem ", i)
module Problem1
solve() = common_function(1)
end # module Problem1
module Problem2
solve() = common_function(2)
end # module Problem2
end # module Problems

不幸的是,它不起作用:运行Problems.Problem1.solve()会产生ERROR: common_function not defined。这能修好吗?

备注:我每个模块有不止一个函数,所以用problem1_solve()函数替换Problem1模块不是一个很好的解决方案。

在版本1.0中,您必须从父级的相对路径导入:

module Problems
common_function(i) = println("Solving problem ", i)
module Problem1
    import ..Problems: common_function
    solve() = common_function(1)
end # module Problem1
end # module Problems

这也适用于using ..Problems

注意:在1.0版本中,此解决方案在LoadError: ArgumentError: Package Problems not found in current path中失败。有关更新,请参阅其他答案。

如果子模块想要使用父模块的功能,它们必须以与不相关模块相同的方式导入。

module Problems
common_function(i) = println("Solving problem ", i)
module Problem1
    import Problems: common_function
    solve() = common_function(1)
end # module Problem1
end # module Problems

在更深层次的模块中,您可以使用

import ...Problems: function

其中一个点表示子模块,两个点表示"同级"模块,三个点表示名为Problems的父模块。

顺便说一句:您使用的结构看起来有点像您来自面向对象编程的背景,并且用于处理继承。如果您可以使用多个分派和抽象类型来构建问题,也许可以再考虑一下。

最新更新