Thanks for this Patrick - I missed that! The 'final' (last bids?) solution is now:
:(f($(quot(symbol(name))))) (I also removed a redundant : and $ pair) On Thursday, February 13, 2014 1:03:33 AM UTC+11, Patrick O'Leary wrote: > > Expr(:quote, x) == Meta.quot(x) > > (and Meta exports quot, so you can use `using Meta` to bring that in and > use it as `quot(x)`) > > On Wednesday, February 12, 2014 12:06:38 AM UTC-6, Fil Mackay wrote: >> >> Thanks Jake, the final answer for completeness (using the symbol name >> from a string) was: >> >> :(f($(Expr(:quote, symbol(:($name)))))) >> >> eval()s to: >> :(f(:abc)) >> >> On Wed, Feb 12, 2014 at 4:38 PM, Jake Bolewski <[email protected]>wrote: >> >>> Hey Fil, >>> >>> More directly answering your question: >>> >>> julia> eval(:(f($:(:abc)))) >>> >>> or eqivalently >>> >>> julia> eval(:(f($(Expr(:quote, :abc))))) >>> >>> works. >>> >>> Best, >>> Jake >>> >>> >>> On Wednesday, February 12, 2014 12:30:13 AM UTC-5, Jake Bolewski wrote: >>>> >>>> you need to take advantage of quote, see: >>>> https://groups.google.com/forum/#!topic/julia-dev/YxTEkUJcwL8 >>>> >>>> Jake >>>> >>>> On Tuesday, February 11, 2014 11:57:16 PM UTC-5, Fil Mackay wrote: >>>>> >>>>> Is there not an ambiguity of operator : between expressions and >>>>> symbols? I am trying to create an expression that calls a function with a >>>>> symbol parameter, that comes from a string in context of the expression >>>>> creator: >>>>> >>>>> function f(s::Symbol) >>>>> end >>>>> >>>>> f(:abc) # works >>>>> >>>>> # get symbol name from a string >>>>> name = "abc" >>>>> f(symbol(name)) # works >>>>> eval(:(f(symbol(name)))) # still works >>>>> >>>>> # moving over to using the context of the expression creator to >>>>> specify the symbol: >>>>> eval(:(f($(symbol("abc"))))) # nope, this generates: f(abc) >>>>> eval(:(f(:(:($(symbol("abc"))))))) # bad, generates: f(Expr) >>>>> >>>>> # workaround: >>>>> eval(:(f(:($(symbol("abc")))))) # almost, but generates: >>>>> f(symbol("abc")) not f(:abc) >>>>> >>>>> Is there a trick to generate a more direct expression that eval() to: >>>>> f(:abc) ? >>>>> >>>>> >>
