Jupyter with Julia results in unexpected type error: no method matching
Jupyter with Julia results in unexpected type error: no method matching
在 Jupyter 中 运行 以下 Julia 代码时出现意外类型错误,其中看似简单的导入出错:
include("./imp.jl")
include("./imp2.jl")
n = Main.Imp.Network([1,2])
Imp2.p2(n)
这会导致以下错误:
MethodError: no method matching p(::Main.Imp.Network)
Closest candidates are:
p(::Main.Imp2.Imp.Network) at /Users/cg/Dropbox/code/Julia/learning/imp.jl:11
代码如下。这是怎么发生的?
Imp.jl:
module Imp
export Network, p
mutable struct Network
a::Array{Any,1}
end
function p(network::Network)
network
end
end
Imp2.jl:
module Imp2
include("./imp.jl")
function p2(network)
Imp.p(network)
end
end
下面还有更多错误:
Stacktrace:
[1] p2(network::Main.Imp.Network)
@ Main.Imp2 ~/Dropbox/code/Julia/learning/imp2.jl:5
[2] top-level scope
@ In[3]:4
[3] eval
@ ./boot.jl:360 [inlined]
[4] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1116
您可以:
module Imp2
using Main.Imp
function p2(network)
Imp.p(network)
end
end
OR(不在模块定义之外采购 imp.jl
)
module Imp2
include("./imp.jl")
using .Imp
function p2(network)
Imp.p(network)
end
end
在第二种情况下,您的 Julia 代码可能如下所示:
julia> using Main.Imp2
julia> n = Imp2.Imp.Network([1,2])
Main.Imp2.Imp.Network(Any[1, 2])
julia> Imp2.p2(n)
Main.Imp2.Imp.Network(Any[1, 2])
此外,如果您将 export Imp
添加到 Imp2
模块,您可以编写 Imp.Network([1,2])
而不是 Imp2.Imp.Network([1,2])
。
在 Jupyter 中 运行 以下 Julia 代码时出现意外类型错误,其中看似简单的导入出错:
include("./imp.jl")
include("./imp2.jl")
n = Main.Imp.Network([1,2])
Imp2.p2(n)
这会导致以下错误:
MethodError: no method matching p(::Main.Imp.Network)
Closest candidates are:
p(::Main.Imp2.Imp.Network) at /Users/cg/Dropbox/code/Julia/learning/imp.jl:11
代码如下。这是怎么发生的?
Imp.jl:
module Imp
export Network, p
mutable struct Network
a::Array{Any,1}
end
function p(network::Network)
network
end
end
Imp2.jl:
module Imp2
include("./imp.jl")
function p2(network)
Imp.p(network)
end
end
下面还有更多错误:
Stacktrace:
[1] p2(network::Main.Imp.Network)
@ Main.Imp2 ~/Dropbox/code/Julia/learning/imp2.jl:5
[2] top-level scope
@ In[3]:4
[3] eval
@ ./boot.jl:360 [inlined]
[4] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1116
您可以:
module Imp2
using Main.Imp
function p2(network)
Imp.p(network)
end
end
OR(不在模块定义之外采购 imp.jl
)
module Imp2
include("./imp.jl")
using .Imp
function p2(network)
Imp.p(network)
end
end
在第二种情况下,您的 Julia 代码可能如下所示:
julia> using Main.Imp2
julia> n = Imp2.Imp.Network([1,2])
Main.Imp2.Imp.Network(Any[1, 2])
julia> Imp2.p2(n)
Main.Imp2.Imp.Network(Any[1, 2])
此外,如果您将 export Imp
添加到 Imp2
模块,您可以编写 Imp.Network([1,2])
而不是 Imp2.Imp.Network([1,2])
。