> Is it also possible to get a list of names of the variables used in a
> function?
>
> e.g. for
>
> function f(x,y)
> k=0.1
> return x*y+k
> end
>
> I'd like to get a list ["k","x","y"]
>
> My first thought was to make a method f() that returns this list, but if
> its possible to do this otherwise and more generally that would be very
> useful
You'd have to inspect the AST. Looks like there is indeed a list in there:
julia> f(x,y) = (a=5;x+y+a)
f (generic function with 1 method)
julia> methods(f).defs.func.code
AST(:($(Expr(:lambda, Any[:x,:y],
Any[Any[Any[:x,:Any,0],Any[:y,:Any,0],Any[:a,:Any,18]],Any[],0,Any[]], :(begin
# none, line 1:
a = 5
return x + y + a
end)))))
You can get at it with:
julia> ast = Base.uncompressed_ast(methods(f).defs.func.code)
:($(Expr(:lambda, Any[:x,:y],
Any[Any[Any[:x,:Any,0],Any[:y,:Any,0],Any[:a,:Any,18]],Any[],0,Any[]], :(begin
# none, line 1:
a = 5
return x + y + a
end))))
julia> ast.args[2][1]
3-element Array{Any,1}:
Any[:x,:Any,0]
Any[:y,:Any,0]
Any[:a,:Any,18]