On Sunday, August 03, 2014 12:46:15 PM Abe Schneider wrote:
> Awesome, that works. Thank you!
> 
> Is there some master list of these macro-tricks? An IPython-type worksheet
> might serve as a nice look-up table for how to get things done with macros.

Not sure. You could start a section of the FAQ (click the "edit on GitHub" and 
then the little pencil icon; you can edit it directly in your browser, and it 
will submit a PR).
http://docs.julialang.org/en/latest/manual/faq/

--Tim

> 
> On Sunday, August 3, 2014 3:04:53 PM UTC-4, Tim Holy wrote:
> > It's not obvious. Try this:
> > 
> > macro mytest(fn::Symbol, ex::Expr)
> > 
> >      qex = Expr(:quote, ex)  # here's the magic incantation
> >      quote
> >      
> >        $(esc(fn))($qex)
> >      
> >      end
> > 
> > end
> > 
> > Works for symbols that you want to keep as symbols, too.
> > 
> > But your `foo` method is not defined for an expression, so your test case
> > will
> > throw an error.
> > 
> > --Tim
> > 
> > On Sunday, August 03, 2014 11:46:43 AM Abe Schneider wrote:
> > > I found one previous conversation related to this, but unfortunately the
> > > answer didn't work for me. Hopefully I'm not asking an obvious question.
> > > 
> > > Suppose I have some macro:
> > > macro mytest(fn::Symbol, ex::Expr)
> > > 
> > >   quote
> > >   
> > >     $(esc(fn))($ex)
> > >   
> > >   end
> > > 
> > > end
> > > 
> > > and I have some function that takes in the expression to operate on it:
> > > myfun(ex::Expr) = ...
> > > 
> > > the problem (which may be obvious) is that `$ex` gets evaluated with the
> > > macro, and I won't pass an `Expr` to `myfun`. A quick demonstration:
> > > 
> > > foo(x, y) = x+y
> > > println(expandmacro(:(@mytest foo 1+2)))
> > > 
> > > gives:
> > > 
> > > begin  # .../mtestmod.jl, line 38:
> > >     foo(mtestmod.+(1,2))
> > > 
> > > end
> > > 
> > > What I can't figure out is how to keep `ex` an expression that is passed
> > 
> > to
> > 
> > > foo (at least without writing out Expr by hand). I've tried many
> > > combinations of syntax to try to preserve the Expr-ness of `ex`.
> > > 
> > > Thanks!

Reply via email to