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

在构建模块时,Julia中的“using”和“import”有什么区别?,julia,Julia,问题:当我构建自己的模块时,在Julia中使用和导入有什么区别 我根据阅读文档猜测:使用将另一个模块带入当前模块的名称空间导入用于将来自其他模块的特定类型/函数/变量带入当前模块的名称空间 那么,我错了多少?朱莉娅说: 仅导入关键字[…] 一次操作一个名称。它不添加要添加的模块 使用搜索的方式导入与使用的不同之处在于 必须使用import导入函数才能使用新的 方法。[…]无法扩展其名称仅通过使用可见的函数 (我的重点。) 例如,您可以使用import将方法添加到Base。show可以漂亮地打印您

问题:当我构建自己的模块时,在Julia中使用
和导入
有什么区别

我根据阅读文档猜测:
使用
将另一个模块带入当前模块的名称空间<代码>导入
用于将来自其他模块的特定类型/函数/变量带入当前模块的名称空间

那么,我错了多少?

朱莉娅说:

仅导入
关键字[…]
一次操作一个名称。它不添加要添加的模块
使用
搜索
的方式<代码>导入
与使用
的不同之处在于 必须使用
import
导入函数才能使用新的 方法。[…]无法扩展其名称仅通过
使用
可见的函数

(我的重点。)

例如,您可以使用
import
将方法添加到
Base。show
可以漂亮地打印您自己的类型,但不能使用
使用

还有导入模块的所有导出名称的
importall

(这个答案是指Julia 0.6;文档被改写为1.0。)

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

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

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

命令

  • 使用MyModule
    • 范围内:所有导出名称(
      x
      y
      )、
      MyModule.x
      MyModule.y
      MyModule.p
    • 可扩展:
      MyModule.x
      MyModule.y
      MyModule.p
  • 使用MyModule:x,p
    • 范围:
      x
      p
    • 可扩展:(无)
  • 导入MyModule
    • 在范围中:
      MyModule.x
      MyModule.y
      MyModule.p
    • 可扩展:
      MyModule.x
      MyModule.y
      MyModule.p
  • 导入MyModule.x、MyModule.p
    • 范围:
      x
      p
    • 可扩展:
      x
      p
  • 导入MyModule:x,p
    • 范围:
      x
      p
    • 可扩展:
      x
      p

非常清楚,谢谢(+1+勾选)。在提问之前,我确实读了那篇文章,但显然没有理解其中的意思。你的强调很有帮助。我可以说
使用
导入
更具限制性,因为它禁止扩展名称吗?或者可能是
使用
可以做些什么,但
导入
却做不到。当文档中说“名称只能通过
使用
才能看到的函数不能扩展”时,这是什么意思?具体地说,“可见”在函数名的上下文中是什么意思?我的头脑被炸开了。。。我以前没有意识到,现在,
使用
允许导入扩展。
module MyModule

export x, y

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

end