使用模块功能代替基本功能Julia

时间:2016-03-05 17:25:46

标签: julia

假设我有一个Julia模块MyModule,它定义了一个名为conv()的函数用于1D卷积。我希望能够通过MyModule.conv()在导入或使用该文件的文件中调用此函数。例如:

import MyModule.conv
MyModule.conv()

但是,我无法使用此语法;朱莉娅仍然拨打Base.conv()而不是MyModule.conv()。我尝试了usingimport的所有不同样式,但无法使用此语法。

Julia有这个功能吗?我觉得我已经看到这个在其他Julia软件包中实现,但找不到一个有效的例子。

编辑

目前的设置如下;在定义之外的ModA中没有对conv()的引用。

module ModA

function conv(a, b)
    println("ModA.conv")
end

end 

然后,在另一个文件中,

import ModA
conv(x, y) #still calls Base.conv()

解决
这完全是我的错。由于LOAD_PATH调用与我调用的文件不同的版本(在LOAD_PATH中找到第一个,而不是我正在编辑的那个版本),因此导入无法正常工作。完全是我的错......

1 个答案:

答案 0 :(得分:3)

你的意思是这样吗?

module ModA
   conv() = println("Calling ModA.conv")
end

module ModB  # Import just conv from ModA
   using ..ModA.conv # Could have used import ..ModA.conv instead
   conv()            # if we want to be able to extend ModA.conv
end

module ModC  # Import ModA and use qualified access to access ModA.conv
   import ..ModA
   ModA.conv()
end

在定义自己的函数之前,您必须确保不要在conv内对ModA进行任何引用,或者它已经查找Base.conv并将名称与{conv相关联1}}。