Hello,
I am building a new package for the first time, and I’m running into a problem when I call one of the functions exported by my package, SimpleNavierStokes.jl.
The package exports a function, LidDrivenCavity()
. This function returns an object of type Results
, which I have defined inside the SimpleNavierStokes
module like this:
struct Results
ψ::Array
ω::Array
hist::Array
x::Array
y::Array
...
end
This works as expected. Next, I have defined a custom “plotting function”. Rather than redefining plot()
with my new type Results
, I decided to define my own function, which does something like this:
ShowStreamlines(sol::Results) = contour(sol.x,sol.y,sol.ψ)
(I have also tried replacing sol::Results
with sol:SimpleNavierStokes.Results
; this doesn’t appear to help.) Aside: I know this looks like a trivial function, but I plan to make it more useful and so I would like to do something like this rather than expecting the user to call plot
on the different constituent parts of Results
.
This function does get exported, but when I call it on an object of type Results
, like this:
Pkg.add("https://github.com/emadmasroor/SimpleNavierStokes.jl")
using Plots, SimpleNavierStokes
a = LidDrivenCavity()
ShowStreamlines(a)
I get:
ERROR: UndefVarError: contour not defined
Stacktrace:
[1] ShowStreamlines(::Results) at /home/emad/.julia/packages/SimpleNavierStokes/JTjDG/src/plot_utils.jl:12
[2] top-level scope at REPL[26]:1
Just to be clear, my REPL does recognize the function contour
, because immediately after the above, if I type:
contour
I get the expected: contour (generic function with 1 method)
.
Why does this happen, and how can I fix it? I don’t think I should have to put a using Plots
inside my own package, other packages don’t really do this. But why does my code not recognize contour
, when my current environment contains Plots
and the functions are immediately available?
Note: If I subsequently define a function like ShowStreamlines
inside the REPL, say by doing this at the REPL
Show2(sol::SimpleNavierStokes.Results) = contour(sol.x,sol.y,sol.ψ)
Show2(a)
it works as expected, and I get the output of the contour plot. So I am probably doing something wrong inside my package.
I appreciate any help!