> @Mauro  Base.$f does not work either.

Yes, that is odd:

julia> a = :cos
:cos

julia> eval(:(Base.$a))
cos (generic function with 13 methods)

julia> eval(:(Base.$a(x::String) = 5))
ERROR: unsupported or misplaced expression $

I think this might be a bug.  Anyway, either construct it via exprs, as
Mike suggested or this work-around might work:

julia> b = :(Base.$a)
:(Base.cos)

julia> eval(:($b(x::String) = 5))
cos (generic function with 13 methods)


> On Thu, Mar 26, 2015 at 7:28 PM, Mike Innes <[email protected]> wrote:
>
>> For some reason the parser doesn't like interpolating into import/export
>> statements, but you can do this just fine by constructing the `Expr` object
>> by hand. It's not pretty, but it works OK.
>>
>> You best bet is to construct expressions like `:(export foo, bar)` and
>> `dump` them to see how the Expr is constructed. I think for export it's
>> something like `Expr(:export, :foo, :bar)`.
>>
>> Example:
>> https://github.com/one-more-minute/Hiccup.jl/blob/073f47314d1f08e0e5c8a958a25051248bb85039/src/Hiccup.jl#L95-L100
>>
>> On 26 March 2015 at 12:52, Andreas Noack <[email protected]>
>> wrote:
>>
>>> Distributed reduce is already implemented, so maybe these slightly
>>> simpler with e.g. sum(A::DArray) = reduce(Base.AddFun(), A)
>>>
>>> 2015-03-26 8:41 GMT-04:00 Jameson Nash <[email protected]>:
>>>
>>> `eval` (typically) isn't allowed to handle `import` and `export`
>>>> statements. those must be written explicitly
>>>>
>>>> On Thu, Mar 26, 2015 at 8:18 AM Amit Murthy <[email protected]>
>>>> wrote:
>>>>
>>>>> I was trying to add a bunch  of common functions to
>>>>> DistributedArrays.jl with the below code block
>>>>>
>>>>> for f in [:sum, :minimum, :maximum, :mean]
>>>>>     @eval begin
>>>>>         import Base: ($f)
>>>>>         export ($f)
>>>>>         function ($f)(D::DArray)
>>>>>             refs = [@spawnat p ($f)(localpart(D)) for p in procs(D)]
>>>>>             ($f)([fetch(r) for r in refs])
>>>>>         end
>>>>>     end
>>>>> end
>>>>>
>>>>>
>>>>>
>>>>> But I get an error
>>>>>
>>>>> ERROR: LoadError: syntax: invalid "import" statement: expected
>>>>> identifier
>>>>>  in include at ./boot.jl:250
>>>>>  in include_from_node1 at ./loading.jl:129
>>>>>  in reload_path at ./loading.jl:153
>>>>>  in _require at ./loading.jl:68
>>>>>  in require at ./loading.jl:51
>>>>>  in process_options at ./client.jl:292
>>>>>  in _start at ./client.jl:402
>>>>> while loading /home/amitm/.julia/v0.4/DistributedArrays/src/
>>>>> DistributedArrays.jl, in expression starting on line 497
>>>>>
>>>>>
>>>>>
>>>>> What am I doing wrong ?
>>>>>
>>>>>
>>>
>>

Reply via email to