外部模块的参考功能

时间:2015-09-11 07:41:42

标签: julia

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

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()模块不是一个很好的解决方案。

2 个答案:

答案 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