Say I have the following module definition:
module Foo
include("bar.jl")
include("baz.jl")
include("qux.jl")
end
bar.jl uses a function provided by qux.jl. What is the julian way to handle this sort of intermodular dependency? Should we just order the files in an order that satisfies all requirements, or is there a neater approach?
That’s the simplest solution, if you want to keep everything in the same module.
Or add a function definition with no method at the beginning of the module
function f end
This way you can have bar.jl use baz.jl functions and the other way around. See https://docs.julialang.org/en/latest/manual/methods/#Empty-generic-functions-1.
For functions the order should not matter, if you only call them in the function body, e.g.
julia> module Foo
bar() = baz()
baz() = "Hello, world!"
end
Foo
julia> Foo.bar()
"Hello, world!"
The ordering matters however if you use the function in the function signature, e.g.
julia> module Foo
bar(::typeof(baz)) = baz()
baz() = "Hello, world!"
end
ERROR: UndefVarError: baz not defined
3 Likes