可以说我有一个Julia模块MyModule,它为一维卷积定义了一个称为conv()的函数。我希望能够通过导入或使用该文件的文件中的MyModule.conv()调用此函数。例:

import MyModule.conv
MyModule.conv()

但是,我无法使这种语法正常工作。 Julia仍然调用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中找到第一个文件,而不是我正在编辑的文件)。完全是我的错

最佳答案

你的意思是这样吗?

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关联。

关于julia - 使用模块函数代替基本函数Julia,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35817307/

10-11 08:56