Works for me both with @eval and eval(quote ... end). Maybe you are using a 
different version of Julia. I'm on the latest Windows nightly. 

On Thursday, May 8, 2014 6:18:27 PM UTC+3, Stéphane Laurent wrote:
>
> No that generates an error:
>
> ErrorException("error compiling removeLine: syntax: prefix \$ in non-quoted 
> expression")
>
>
>
> Le jeudi 8 mai 2014 17:09:24 UTC+2, Johan Sigfrids a écrit :
>>
>> You can still use meta-programming to generate the code
>>
>> function removeLine(poly, index)
>>     for op = (:a, :b, :x1, :y1, :x2, :y2, :typ)
>>         @eval splice!($poly.$op, $index)
>>     end
>> end
>>
>> On Thursday, May 8, 2014 5:40:35 PM UTC+3, Stéphane Laurent wrote:
>>>
>>> Thank you Johan and Jameson.
>>>
>>> Johan, I don't know how to make a loop on the fields with a function. 
>>> For example this doesn't work:
>>>
>>> function removeLine(poly::Poly, index::Int)
>>>
>>>     for op = (:a, :b, :x1, :y1, :x2, :y2, :typ)
>>>
>>>         splice!(poly.$op, index)
>>>
>>>     end
>>>
>>> end
>>>
>>>
>>> How to do, please ?
>>>
>>>
>>> Le jeudi 8 mai 2014 15:59:06 UTC+2, Jameson a écrit :
>>>>
>>>> Replace your macro with a function and delete the uses of eval. You 
>>>> code will be faster, and easier to understand. Most of the difficulty 
>>>> people seem to have with macros comes from thinking they are a type of 
>>>> function call -- the @ character is supposed to remind you that this is 
>>>> not 
>>>> true.
>>>>
>>>> On Thursday, May 8, 2014, Johan Sigfrids <[email protected]> wrote:
>>>>
>>>>> I myself have been hitting my head against the wall that is 
>>>>> meta-programming in Julia. I think I can answer your first question at 
>>>>> least.
>>>>>
>>>>> Q1: This is because the line poly = emptyPoly doesn't create a new 
>>>>> copy of a ploygon but a reference to the empty one so that both polyand 
>>>>> emptyPoly 
>>>>> refer to the same data. You need to do poly = deepcopy(emptyPoly) . 
>>>>>
>>>>> On Thursday, May 8, 2014 9:56:27 AM UTC+3, Stéphane Laurent wrote:
>>>>>
>>>>> Hello everybody,
>>>>>
>>>>>  Below I define two new types : Line and Poly. The Poly type is 
>>>>> intended for stacking some lines.  
>>>>>
>>>>> type Line
>>>>>
>>>>>         a::Float64   # intercept
>>>>>
>>>>>         b::BigFloat  # slope
>>>>>
>>>>>         x1::BigFloat # x-coordinate of first vertex
>>>>>
>>>>>         y1::BigFloat # y-coordinate of first vertex
>>>>>
>>>>>         x2::BigFloat # x-coordinate of second vertex
>>>>>
>>>>>         y2::BigFloat # y-coordinate of second vertex
>>>>>
>>>>>         typ::Bool    # type of the line (true:upper, false:lower)
>>>>>
>>>>> end
>>>>>
>>>>>
>>>>> type Poly
>>>>>
>>>>>         a::Vector{Float64}
>>>>>
>>>>>         b::Vector{BigFloat}
>>>>>
>>>>>         x1::Vector{BigFloat}
>>>>>
>>>>>         y1::Vector{BigFloat}
>>>>>
>>>>>         x2::Vector{BigFloat}
>>>>>
>>>>>         y2::Vector{BigFloat}
>>>>>
>>>>>         typ::Vector{Bool}
>>>>>
>>>>> end
>>>>>
>>>>>
>>>>>
>>>>> I also define the empty Poly:
>>>>>
>>>>> emptyPoly = Poly(Array(Float64,0), Array
>>>>>
>>>>> 

Reply via email to