我致力于解决两个密切相关问题的数字代码。以下对我来说似乎是一个很好的代码结构:
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
函数替换problem1_solve()
模块不是一个很好的解决方案。
答案 0 :(得分:2)
注意:在1.0版中,此解决方案失败并显示
LoadError: ArgumentError: Package Problems not found in current path
。请参阅other answer了解更新。
如果子模块想要使用父模块的功能,则必须以与不相关模块必须相同的方式导入它们。
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。
作为旁注:您使用的结构看起来有点像您来自面向对象编程背景并且习惯于继承。如果您可以使用多个调度和抽象类型来构建问题,也许再想一想。
答案 1 :(得分:0)
在1.0版中,您必须从relative 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
这也适用于using ..Problems
。