在 Julia 中修改包中的函数

RLL*_*LLL 1 julia

首先,如果这个问题看起来很模糊,我很抱歉,因为我是 Julia 的新手,我主要想知道 Julia 是否有一种简单的方法来修改包的本机函数,同时简单地使用它的所有依赖项,或者必须有一个特定于包的解决方案。

例如,foo是LibraryA包中的一个函数,可以简单地调用和使用它,如下所示:

using LibraryA 

foo(args)
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要 foo() 的稍微修改版本,例如 bar(),其源代码(主要是 foo() 函数的副本)位于单独的文件 bar.jl 中,并使用 LibraryA 中的大量依赖项,线

using LibraryA 

include("bar.jl")
bar(args)
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为会发生大量加载错误:

LoadError: UndefVarError: vars not defined
Run Code Online (Sandbox Code Playgroud)

其中 vars 是包 LibraryA 中定义的变量

sun*_*ica 5

只要变量位于 中的全局作用域中LibraryA,您就可以显式导入它们以使其在当前作用域中可用:

using LibraryA: vars, bigvar, littlevar, baz

include("bar.jl")
bar(args)
Run Code Online (Sandbox Code Playgroud)

然而,按照约定,请确保这些变量不是“私有”的,即供 LibraryA 内部使用的(Julia 中没有明确的私有标记,通常是根据文档推断的)。

如果变量vars本身看起来是私有的,但有一个getvars公共的访问器,则您可以vars使用该访问器在当前作用域中创建一个新变量。

using LibraryA: bigvar, littlevar, baz, getvars

vars = getvars()

include("bar.jl")
bar(args)
Run Code Online (Sandbox Code Playgroud)

const var(如果它是原来的,请确保将其设为 a constvar::WhateverTheTypeOfVarIs如果原始模块中也对它进行了注释,则类似地键入注释它。)