【问题标题】:Import a module and use it in julialang导入一个模块并在 julialang 中使用它
【发布时间】:2014-03-25 23:38:10
【问题描述】:

由于http://julia.readthedocs.org/en/latest/manual/modules/没有太多关于模块的信息,我想问一下。

我想通过 ijulia 尝试两个模块。这两个模块都在我的工作目录中 文件名.jul。我将它们统称为 module_1.jul 和 module_2.jul。

module_1.jul 使用 module_2.jul 我加载它

using module_2

在 ijulia 会议上,如果我尝试

using module_1

给出一个错误。我也试过了

include("module_1.jul")

这最后一句在执行时会报错,因为 module_1.jul 找不到 我知道的变量“x”包含在 module_1.jul 中(在这种情况下,我“加载”了模块 在 module_1.jul 中使用 include("module2.jul")

【问题讨论】:

标签: julia


【解决方案1】:

Julias 模块系统假设了一些最初从文档中不一定显而易见的事情。

  1. Julia 文件应以 .jl 扩展名结尾。
  2. Julia 在 LOAD_PATH 变量中定义的目录中查找模块文件。
  3. Julia 在这些目录中以 ModuleName/src/file.jl 形式查找文件

如果using module_1 失败,那么我猜是因为它的源文件不符合上述条件之一。

【讨论】:

  • 但是看看 LOAD_PATH 变量,我觉得这将是一个缺点,不是吗?不知何故,我希望看到一个像 fortran 甚至 python 代码这样的 julia 程序,您可以在其中编译模块,然后执行主程序,但不添加来自其他程序的模块(我怀疑,变量 LOAD_PATH 确实如此)。
  • 我不认为我理解你的问题。 LOAD_PATH 只是一个变量,它告诉 julia 去哪里看。在您键入 import、include 或 using 之前,不会加载任何内容。这就像您的终端 PATH 变量。添加到它不会导致任何内容被加载。
  • 但是假设我非常热情并且我在 LOAD_PATH 变量中加载了一百万个模块,并且假设我也可以有相同名称、不同内容、存储在不同路径的模块。如果按照我的假设,从左到右搜索 LOAD_PATH,如何正确链接我想要使用的那个?
  • 这个对话很快就会变得毫无意义。朱莉娅以某种方式工作,如果你的热情与朱莉娅的工作方式不符,那么朱莉娅就会为你失败。但听起来你还是不太明白。 LOAD_PATH 只是一个字符串列表。它不会“加载”任何东西。它只是告诉朱莉娅在你要求它加载东西时去哪里看。
  • @user2820579,您会收到关于模块引用不明确的错误(您可以自己轻松测试)
【解决方案2】:

这个问题已经过去了一段时间。最近Noah_S在上一个答案的cmets中写了解决方案;这意味着对于开始学习该语言的人来说,这是一个反复出现的疑问。为了他们,我将在这里重写 Noah_S 的答案以及我最新颖的解决方案。

我对@9​​87654321@ 版本以及哪些命令适用于特定版本感到一团糟,因此对于较旧的 julia 版本,我们必须查找 \path 然后将其包含在 julia 模块中

push!(LOAD_PATH, "/path")

在较新的版本中,这可以得到改进。忘记手动寻找路径,然后去做

path = readstring(`pwd`)
push!(LOAD_PATH, chomp(path))

希望对很多julians新人有用。

【讨论】:

  • 在 Julia 1.1.0 中,我找不到 readstring,但是 pwd() 是一个返回当前工作目录的函数。
  • 然后他们在最新版本中使这更容易!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2018-04-06
  • 2022-01-08
  • 1970-01-01
  • 2023-03-20
  • 2018-12-23
相关资源
最近更新 更多