The examples should definitely work, so please open an issue on github. Either the parsing or the example should be updated, but I don't know what.
There is an issue <https://github.com/JuliaLang/julia/issues/6463> to include the examples in the testing suite, but it seems like nobody has picked up the ball yet. Ivar kl. 08:36:48 UTC+2 torsdag 8. mai 2014 skrev Tim Besard følgende: > > Aha, thanks for that tip about esc(), my example now works correctly. > > Also, when venturing in macro land I came across examples/staged.jl, which > doesn't seem to work with 0.3 anymore (it does with 0.2). What is the > policy on that, should I open an issue? It seems that the let-wrapping on > line 24 causes a malformed expression error. > > Op dinsdag 6 mei 2014 17:23:06 UTC+2 schreef Jameson: >> >> Your first example would be better / easier / clearer / faster of you >> use an anonymous closure function instead of eval >> function f(a) >> g=()->length(a) >> println(g()) >> end >> >> A macro should not call eval. Instead return esc(ex) to make you code >> functional >> >> >> On Tuesday, May 6, 2014, Tim Besard <[email protected]> wrote: >> >>> Also, on a related note, is it possible to create a macro which >>> transforms a function, but makes the result accessible in the caller's >>> package? e.g. >>> module Test >>> >>> export @transform >>> >>> macro transform(ex) >>> eval(ex) >>> end >>> >>> end >>> >>> using Test >>> >>> @transform function foobar() >>> println("foobar") >>> end >>> >>> function main() >>> foobar() >>> end >>> >>> main() >>> >>> This testcase doesn't work due to foobar being defined in the Test >>> package. I'd want to avoid having to call Test.foobar(). >>> >>> Op dinsdag 6 mei 2014 11:34:39 UTC+2 schreef 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 = >>>> >>>
