我编写了一个数字代码来解决两个密切相关的问题。以下代码结构对我来说似乎很好:
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的父模块。
顺便说一句:您使用的结构看起来有点像您来自面向对象编程的背景,并且用于处理继承。如果您可以使用多个分派和抽象类型来构建问题,也许可以再考虑一下。