【问题标题】:Declaring main function/entry point in Julia在 Julia 中声明主函数/入口点
【发布时间】:2014-07-24 01:30:55
【问题描述】:

是否有现成或惯用的方式在 Julia 程序中声明入口点(即相当于 C 中的 main 或 Python 中的 if __name__ == "__main__" 构造)?

这似乎是一个重要的功能,以便编写不会在交互模式下使用的更大的结构化代码,但我找不到任何关于如何在 Julia 中完成的提示,如果有的话(a可能的逃生路线可能是编写一个任意函数作为main,然后在主模块末尾的顶层调用它一次,但这并不优雅,甚至可能效率不高)。 TIA。

【问题讨论】:

标签: function julia code-structure


【解决方案1】:

您可以编写一个main 函数并从文件的顶层调用它。要从命令行运行程序,您可以使用julia -L file.jl -e 'main(some,args)'-L 开关告诉 Julia 加载您的文件,然后 -e 告诉它计算以下表达式。还有一个 -E 开关,用于评估和打印(我认为它是“大声评估”,因为大写字母看起来“大声”)。

与 C 的 main 或 Python 的 if __name__ == "__main__" 相比,这有几个优势:

  1. 您不必只有一个入口点!您可以在加载文件后计算任何表达式,因此您不必将所有命令行功能塞进一个函数中。

  2. 您编写的调用使用完整的 Julia 语法,因此您通常可以避免解析参数。类似-e main(53) 调用main整数 53,不需要atoimain 中。

【讨论】:

    【解决方案2】:

    加载模块时,如果它们有一个名为__init__ 的函数,它将被调用。这有帮助吗?

    【讨论】:

    • 是的,这似乎或多或少是我想要的,谢谢。
    【解决方案3】:

    如果你想做 python 中if __name__ == "__main__": 的习惯用法,我发现了

    if !isdefined(Base, :active_repl)
        main()
    end
    

    成功了。

    我经常发现自己希望能够将我的主文件加载到 REPL 中并有选择地戳一些函数,而无需调用 main 或将 CLI 装订到主要用作库模块的模块上,所以我真的很喜欢来自python的这个技巧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 2019-01-25
      • 2018-01-10
      • 2020-04-19
      • 2022-12-06
      • 2015-06-02
      • 1970-01-01
      相关资源
      最近更新 更多