Well, I'm not sure if I understand your problem correctly, but it works
quite similar.
You just don't need to escape the $ for string interpolation:
eval(parse("println($(length(data)))"))
Am Dienstag, 6. Mai 2014 11:34:39 UTC+2 schrieb Tim Besard:
>
> I'm trying something with macro's, and I can't understand the following
> behavior:
> julia> data = [1 2 3]
> 1x3 Array{Int64,2}:
> 1 2 3
>
> julia> eval(:(println($(length(data)))))
> 3
>
> julia> eval(parse("println(\$(length(data)))"))
> ERROR: unsupported or misplaced expression $
> Why do these behave differently?
>
> Placed in context, I'm trying to generate a function from within macro,
> which on its turn generates an expression containing a the result of a
> subexpression evaluated when the function was called. Or, in code:
> macro outer(ex)
> ex = Expr(:quote, :(println($ex)))
> fdef = quote
> function inner(data)
> $ex
> end
> end
> eval(fdef)
> end
>
> function inner_wanted(data)
> :(println($(length(data))))
> end
>
> function main()
> @outer(length(data))
>
> data = [1 2 3]
>
> println("What I want:")
> ex = inner_wanted(data)
> println(ex)
> eval(ex)
>
> println("\n\nWhat I have:")
> ex = inner(data)
> println(ex)
> eval(ex)
> end
>
> main()
>
> The problem here is that I cannot seem to generate ":($(something))"
> within a quote block... I even tried parse()ing that very construct, as
> seen in the beginning of this mail, but even that fails. Can anybody help
> me out?
>
> Thanks
>
>