Hi everybody!
Is there a way to use a macro argument as an actual Symbol in the quote that the macro returns? The following can hopefully help explaining what I want:
```
julia> macro foo(bar)
:(isdefined($bar))
end
julia> macroexpand(:(@foo baz))
:(isdefined(baz)) # I had hoped for :(isdefined(:baz)) - with :baz instead of baz
```
I've tried various combinations of interpolation, escaping and passing arguments to `symbol`, but to no avail. Is there a way to accomplish this?
--- Actual use case below ---
I noticed a very common pattern in my workflow that I wanted to abstract away to make it quicker and easier:
I want to load module X. If it's in LastMain, it's much faster to get it from there, but otherwise I need to load it from scratch.I can easily write code that does this. Take, for example, Gadfly:
```
(isdefined(:LastMain) && isdefined(LastMain, :Gadfly) && using LastMain.Gadfly) || using Gadfly
```
When I execute that code, Gadfly will load from LastMain if available there, and from scratch otherwise. And it won't error out if I haven't called `workspace()` at all yet. Perfect! But having to type that for each module I want to use the workflow for is a hassle - what if `@quickload Gadfly` would do the same thing? This is my attempt so far:
```
julia> macro quickload(m)
:((isdefined(:LastMain) && isdefined(LastMain, $m #= what do I put here?=#) && using LastMain.$m) || using $m)
end
julia> macroexpand(:(@quickload Gadfly))
:((isdefined(:LastMain) && isdefined(LastMain,Gadfly #= <-- ...to make that :Gadfly instead of Gadfly =#)) && using LastMain.Gadfly || using Gadfly)
```
Thanks in advance!
// T