Hmmm, good to know. Thank you.

 The rationale for doing so is to provide a shortcut for the elements of a 
variable `children`. Specifically, for a grammar, I might have a rule like:

```
@grammar foo begin
   number = r"[0-9]+" { parseint(children[1]) }
end
```

What I would like to have instead, to make it more succint is:

```
@grammar foo begin
   number = r"[0-9]+" { parseint(_1) }
end
```

Originally, just to get things working, I used an `eval`, which while 
worked, also made the assignment global, which was less than ideal.


I'd be curious if anyone has a suggestion on other methods to accomplish 
this, or if this is outside the scope of what's possible to do with Julia.


On Friday, March 6, 2015 at 5:10:07 PM UTC-5, Jameson wrote:
>
> you can't do what you are proposing, by design. a macro cannot do anything 
> that you cannot express directly, it simply allows you to express it more 
> succinctly by templating the redundant parts.
>
> if you want a "set" or "numbered list", use a set or number list. 
> variables are bad at that sort of task. whereas an Array is very good at it.
>
> On Fri, Mar 6, 2015 at 8:05 AM Abe Schneider <[email protected] 
> <javascript:>> wrote:
>
>> I'm trying to create a set of variables (_1, _2, ...) from items within a 
>> list in a macro. I have a (much) condensed version of the code:
>>
>> macro testfn()
>>     quote
>>         i = 1
>>         value = [1, 2, 3]
>>         $(Expr(:(=), Expr(:symbol, Expr(:string, "_", :i)), :value))
>>         println(_1)
>>     end
>> end
>>
>>
>> which gives me:
>>
>> ERROR: syntax: invalid assignment location
>>
>>
>> Any ideas on what might be wrong or the proper way to do this? I would 
>> like to keep this in the quotes, as in the actual version there's a lot 
>> more code surrounding the assignment.
>>
>> I can get things to work with an eval, but I rather avoid the eval, and 
>> it appears to create a non-local variable.
>>
>>
>> Thanks!
>>
>

Reply via email to