在构建模块时,Julia中的"using"和"import"有什么区别?

Col*_*ers 26 julia

问题:当我构建自己的模块时,Julia usingimportJulia有什么区别?

我基于阅读文档的猜测: using用于将另一个模块带入当前模块的名称空间.import用于将特定类型/函数/变量从其他模块引入当前模块的名称空间.

那么,我有多难?

use*_*730 32

Julia Modules文档说明:

import关键字[...] 只能对在一个时间一个名字.它不会添加要搜索的模块using.import也不同之处在于using必须使用import 新方法扩展函数.[...] 名称仅可通过其显示的功能using无法扩展.

(强调我的.)

例如,您可以使用import添加方法Base.show来漂亮打印您自己的类型,但不是using.

importall可以导入模块的所有导出名称.

  • 我可以说“using”比“import”具有限制性,因为它禁止扩展名称?或者也许有些东西“using”可以做,但“import”却不能。 (3认同)
  • 非常清楚,谢谢(+1+勾号)。事实上,我在问问题之前就读过那段话,但显然没有破译其含义。你的强调非常有帮助。 (2认同)

Nat*_*han 28

关于此的文档(Julia 1.4 的更新链接)非常好。以下是我认为最简洁的摘要:

(一个演示模块,使下面的例子具体)

module MyModule

export x, y

x() = "x"
y() = "y"
p() = "p"

end
Run Code Online (Sandbox Code Playgroud)

(这是文档中的一个表,但 StackOverflow 仍然不会添加对表的支持,所以......重新格式化)

命令

  • using MyModule
    • 调查范围:所有出口名称(xy), ,MyModule.xMyModule.yMyModule.p
    • 可扩展:MyModule.x, MyModule.y, 和MyModule.p
  • using MyModule: x, p
    • 范围内:xp
    • 可扩展:(无)
  • import MyModule
    • 范围内:MyModule.x, MyModule.y, 和MyModule.p
    • 可扩展:MyModule.x, MyModule.y, 和MyModule.p
  • import MyModule.x, MyModule.p
    • 范围内:xp
    • 可扩展:xp
  • import MyModule: x, p
    • 范围内:xp
    • 可扩展:xp


sun*_*ica 7

以我觉得容易记住的方式总结主要区别:

  1. using NiceStuff允许在没有模块限定符的情况下访问导出的名称,但事实并非import NiceStuff如此;和
  2. import NiceStuff: nice允许在没有模块限定符的情况下对指定函数进行扩展using NiceStuff: nice访问(添加方法),但事实并非如此。

还有一个细微的区别:
X as Y对于带有usingimport( using Random: randstring as rstr, import Random: randstring as rstr) 的单个标识符,语法是允许的,但对于模块名称本身来说,import Random as Rnd是允许的,而using Random as Rnd是一个错误。

我发现模块文档页面中的其他一些有用的点

using ModuleName是出口清单唯一重要的形式。

import NiceStuff相当于using NiceStuff: NiceStuff.