module - Julia 只从第一个自制模块中导入名称
问题描述
我在 Julia 中制作了两个模块。一种用于绘制树结构图,一种用于从符号序列估计熵。第一个有这第一行:
module ArbolGrafosTikz
using LightGraphs, TikzGraphs
abstract type LabelledDiGraph
end
export LabelledTree, Nodo, Subarbol, Arbol,
walk_tree, walk_tree!, tikz_representation
struct LabelledTree <: LabelledDiGraph
g::DiGraph
labels::Vector{Any}
end
等等。第二个有这个标题:
module EntropySymb
using Base.Iterators
export simboliza, problock, ncartprod, issubvec, allprobsn
function simboliza(x, delta=epsi)
# funcion que pasa floats a tres simbolos.
result=0
if x>delta
等等。
在我的主程序中,我的第一行如下:
push!(LOAD_PATH,".")
include("EntropySymb.jl")
include("ArbolGrafosTikz.jl")
using ArbolGrafosTikz
using EntropySymb
但我只能直接访问 ArbolGrafosTikz 中对象的名称,对于 EntropySymb,我必须使用以模块为前缀的名称,否则 Julia REPL 似乎不知道它们。为什么是这样?
解决方案
您的代码中的问题是您首先include
是文件,这些文件已经将模块加载到其中Main
以便Main.EntropySymb
存在。这使得后续的 import 语句using EntropySymb
返回错误
ERROR: importing EntropySymb into Main conflicts with an existing identifier
如果您已经将当前目录(或包含模块的目录)添加到LOAD_PATH
,则无需调用 to即可使用或include
导入模块。你可以简单地写using
import
push!(LOAD_PATH, ".")
using ArbolGrafosTikz
using EntropySymb
如果要include
改用,则应使用using
withMain.ModuleName
或.ModuleName
将导出的名称带入范围。
include("EntropySymb.jl")
include("ArbolGrafosTikz.jl")
using .ArbolGrafosTikz
using .EntropySymb
请注意,您还应该面对第一个模块的问题,但我想您不这样做的原因是因为代码的运行顺序与问题中给出的顺序有些不同,或者您实际上没有运行第一个include
语句。也许在新会话中尝试相同的代码来重现第一个模块的问题。
推荐阅读
- c# - 在 App.config 中保存和加载不同的配置文件
- javascript - 尝试访问 id 数据时,无法读取 null 的属性“用户名”
- javascript - React setState 在 .map() 中被覆盖
- xamarin.forms - Xamarin.Forms 4:未调用 ContentPage 的 OnBackButtonPressed
- c++ - c++连接mysql失败
- jquery - Jquery Datatable不使用MVC显示
- javascript - 从 www.google.com/recaptcha/api/siteverify 获取响应的问题
- python - 如何将 pandas DataFrame 压缩到具有唯一键和列出值的字典中?
- android - 应用程序上的 react-native run-android 时构建错误,没有任何变化
- python - Kivy ScreenManager 不切换屏幕(纯python)