Julia “如何导入/调用”;“分包”;包裹的数量?

Julia “如何导入/调用”;“分包”;包裹的数量?,julia,Julia,我试图使用linearagebra.jl中的函数,该函数在dense.jl中定义 我希望它使用linearlgebra加载,因为它是linearlgebra包(julia/stdlib/linearegebra/src/dense.jl)的一部分。 然而,情况似乎并非如此。 从dense.jl调用函数会抛出一个“UndevarError”,而来自主LinearGebra.jl文件的函数工作正常 因此: 如何从“子包”导入/调用函数?答案取决于函数是否是单独模块的一部分。但是,在这种情况下,您可以

我试图使用linearagebra.jl中的函数,该函数在dense.jl中定义

我希望它使用linearlgebra加载
,因为它是linearlgebra包(julia/stdlib/linearegebra/src/dense.jl)的一部分。
然而,情况似乎并非如此。
从dense.jl调用函数会抛出一个“UndevarError”,而来自主LinearGebra.jl文件的函数工作正常

因此:
如何从“子包”导入/调用函数?

答案取决于函数是否是单独模块的一部分。但是,在这种情况下,您可以在函数名前加上“LinearAlgebra.”,因为问题可能只是函数在默认情况下没有被LinearAlgebra模块导出到您的命名空间中:

julia> using LinearAlgebra

julia> isone
isone (generic function with 13 methods)

julia> _isone_cachefriendly
ERROR: UndefVarError: _isone_cachefriendly not defined

julia> LinearAlgebra._isone_cachefriendly
_isone_cachefriendly (generic function with 1 method)

这种行为在我看来似乎前后矛盾。为什么我可以调用一些LinearAlgebra函数而不具体引用其名称空间,而调用其他函数呢?这并不矛盾。您可以使用完全限定名引用所有名称。只有未导出的名称才能被取消资格这是Julia实现封装的方式:它不使用对象,而是使用模块:模块作者可以选择哪些函数设计为“私有”(未导出)或“公共”(导出)。正如@Bill answer所示,您始终可以使用完全限定名访问“private”函数。