【问题标题】:How to remove the WARNING: replace module <module> in Julia如何删除警告:在 Julia 中替换模块 <module>
【发布时间】:2021-10-06 11:33:42
【问题描述】:

我在一个目录中有几个 Julia 文件,即

FolderName
|
|---main.jl
|---VectorFunctions.jl
|---MatrixFunctions.jl

以下是文件的结构:

VectorFunctions.jl

module VectorFunctions
    # functions...
end

MatrixFunctions.jl

include("VectorFunctions.jl")

module MatrixFunctions
    # functions...
end

ma​​in.jl

include("VectorFunctions.jl")
include("MatrixFunctions.jl")

# Using the functions defined in both files...

在我的终端中使用julia main.jl 运行代码,我得到以下信息:

WARNING: replacing module VectorFunctions.

=== Desired Output ===

如果我在 ma​​in.jl 中删除对 VectorFunctions.jl 的包含,错误就会消失(我怀疑是因为未包含 VectorFunctions再次)。有没有办法绕过这个警告并且仍然将我的附加包含在 ma​​in.jl 中?

【问题讨论】:

    标签: file include julia


    【解决方案1】:

    普热梅斯瓦夫的回答是正确的。请注意,include 就像您将代码从一个地方复制粘贴到另一个地方一样。所以 - 使用include,您的行为就像您将相同的代码复制粘贴到您的程序中一样。

    但是,请注意:

    1. 如果你把VectorFunctions 变成了一个包(here 是一个如何做的说明),那么你可以写include 而不是using VectorFunctions,你可以写多少次都没有一个问题。
    2. 或者,您可以编写以下代码而不是 include("VectorFunctions.jl"),但请注意,通常您不会这样做(建议使用 Przemysław 描述或创建包的方法);下面的方法假设 VectorFunctions.jl 文件只包含 VectorFunctions 模块:
    if isdefined(@__MODULE__, :VectorFunctions)
        VectorFunctions isa Module || error("VectorFunctions is present and it is not a Module")
    else
        include("VectorFunctions.jl")
    end
    

    (再次提醒一下,这不是推荐做的事情;我只是为了向您展示可以避免将同一模块重新加载到当前模块中两次)

    【讨论】:

      【解决方案2】:

      您的模块 VectorFunctions 被定义了两次显然没有意义。

      只需从MatrixFunctions.jl 中删除以下行:

      include("VectorFunctions.jl")
      

      【讨论】:

      • 然后它给了我错误ERROR: LoadError: UndefVarError: VectorFunctions not defined。在 VectorFunctions.jl 和 MatrixFunctions.jl 中有一个名为 dot_product 的函数可能会有所帮助,我使用 VectorFunctions.dot_product(v1, v2) 调用它。
      • 也许你在某处还有其他代码。使用模块加载代码一次就足够了。你做了两次,因此收到警告。
      猜你喜欢
      • 2019-09-27
      • 2017-10-06
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多