在我的 Julia 代码中,我使用来自其他文件的函数,这些函数是通过 include 添加的。例如,我可能有类似
using DataFrames, CSV
import Random: shuffle, seed
using Base.Filesystem: mkpath
include("existing_code.jl")
seed!(2025)
但是,代码中existing_code.jl
可能已经包含类似
using DataFrames, CSV, Random
using Base.Filesystem: mkpath
Random.seed!(1984)
但是,我的印象是,由于模块(例如DataFrames, CSV, Random
已经在其他文件中导入,因此无需重新导入它们。我想知道,这里的好做法是什么?不遵循良好做法可能存在哪些危险?
该
include(...)
函数运行给定的文件,就好像文件的内容只是简单地复制并粘贴到include
调用的位置一样。从这个角度来看,很明显您正在using
多次运行这些调用,我同意您不需要第二次重新导入模块。如果您知道所需的模块将加载到existing_code.jl中,那么最好避免重复导入,只需省略文件的前三行。这样做的好处是不必要的检查会花费时间(尽管不会花费太多时间)。如果担心文档,请考虑在include调用中留下关于导入了哪些模块的注释。
根据您对“may”和“might”的用法,似乎导入的文件可能不包含必要的模块。在这种情况下,
using
需要 s。对于这种预期,有两种选择。一种是执行您已完成的操作:始终尝试再次导入模块。缺点是有时没有必要。第二种选择是检查每次导入以决定是否导入。这可能看起来像:如果您愿意对项目进行一些大修,许多人会认为最佳做法是创建一个新模块,其中同名文件可以导入所有必要的模块,然后可以通过各种方法使用这些模块。这里有一个很好的总结:https://discourse.julialang.org/t/best-practise-organising-code-in-julia/74362/2