julia> macro nb(f, args...)
           arg1 = map(x->:($(esc(x))), args)
           :($f($(arg1...)))
       end

julia> @nb print arr
[0.0,0.020100000000000007, ...

If you haven't used it already, I would suggest to look at macroexpand to
see the expression resulting from each macro (for example, look at why the
previous version didn't work).

julia> macroexpand( :(@nb print arr) )

On Wed, Jan 14, 2015 at 8:32 PM, yi lu <[email protected]>
wrote:

> Well, I don't get it very clearly. I learnt that 'esc' changes variable
> names of a local variable in the macro. But I want to reference the global
> variable out of the macro. I have little idea of Lisp macros, so I think I
> still cannot handle this.
> Would you please add more details?
>
> Yi
>
> On Wed, Jan 14, 2015 at 11:37 PM, Isaiah Norton <[email protected]>
> wrote:
>
>> You need to use 'esc' -- see the hygiene part of the metaprog section in
>> the manual.
>> On Jan 14, 2015 8:56 AM, "yi lu" <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> I am able to write a simple macro to drop brackets.
>>> https://gist.github.com/eccstartup/36637d96355bd5ca8188
>>>
>>> But there is some problem with this.
>>>
>>> You can see the @nobrace macro that drop brackets of functions.
>>> For example:
>>> ```
>>> @nobrace map (x->x^2-1) 1:0.01:2
>>> ```
>>> get a list of Float numbers. This is fine.
>>>
>>> However, in the macro, we cannot see global variables.
>>> For example:
>>> ```
>>> arr = @nobrace map (x->x^2-1) 1:0.01:2
>>> print(arr)
>>> ```
>>> will print the "arr" list, but
>>> ```
>>> arr = @nobrace map (x->x^2-1) 1:0.01:2
>>> @nobrace print arr
>>> ```
>>> will report "arr not found".
>>>
>>> Is there a remedy?
>>>
>>>
>>> Yours,
>>> Yi
>>>
>>
>

Reply via email to