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