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
>>>>
>>>>