Julia has no static keyboard. In C, a static variable inside a function has a value that persists over function calls.
One way to emulate this in Julia is with a global variable. This has two limitations: first, this pollutes the global scope; second, a global variable should be const for performance, since its type cannot be annotated. What if I want a non-const static variable?
Is there a way to emulate a local static variable in Julia?
Local in the sense that it should be visible only inside the scope of the function that uses it.
It’s unclear what the semantic of a static local variable in julia should be. On possible implementation with a certain semantic is
julia> macro static(expr)
if Meta.isexpr(:(::), expr)
T = eval(current_module(), expr.args[2])
name = expr.args[1]
else
T = Any
name = expr
end
:($(esc(name)) = $(Ref{T}()))
end
Or just do call overloading. This example has 2 constants which can be used inside the function:
type LotkaVolterra <: ParameterizedFunction
a::Float64
b::Float64
end
f = LotkaVolterra(0.0,0.0)
(p::LotkaVolterra)(t,u,du) = begin
du[1] = p.a * u[1] - p.b * u[1]*u[2]
du[2] = -3 * u[2] + u[1]*u[2]
end
The last line makes f a function f(t,u,du), and uses the fields a and b from the type.
Since f is just an instance of a type, you can also change these fields outside of the function if you want. f.a = 1. Or you can only use them in the function, take your pick.