Consider the following code for defining a function from a symbolic expression, using the metaprogramming facilities of Julia:
expression_G = :(x^3) G = eval(:(x->$expression_G)) println(G(3))
it works as expected and prints the value 27. However, if you do exactly the same inside a function.
function f() expression_G = :(x^3) G = eval(:(x->$expression_G)) println(G(3)) end f()
you get an error message like this one:
include("example2.jl") ERROR: LoadError: MethodError: no method matching (::getfield(Main, Symbol("##5#6")))(::Int64) The applicable method may be too new: running in world age 25570, while current world is 25571. Closest candidates are: #5(::Any) at /home/pablo/programitas/test/example2.jl:3 (method too new to be called from this world context.) Stacktrace:  f() at /home/pablo/programitas/test/example2.jl:4  top-level scope at none:0  include at ./boot.jl:326 [inlined]  include_relative(::Module, ::String) at ./loading.jl:1038  include(::Module, ::String) at ./sysimg.jl:29  include(::String) at ./client.jl:403  top-level scope at none:0 in expression starting at /home/pablo/programitas/test/example2.jl:7
What is happening and can I do something about it? (I guess that
this is related to when the code is actually gets compiled.)