This gets me quite far - thanks a lot! However, to make it work, I have to 
hard-code the value of datafile, since I can’t figure out how to get the 
macro to create the string "$datafile.jld" correctly. This is probably OK 
for my use case - I only have two datafiles, so I can create two macros :P 
But it would be nice to learn how to do it, if it’s possible.

Basically, is there a way to make the following work?

@macro foo(bar)
    esc(quote 
        "$bar.baz"
    end)
end

Currently @foo("fizz") is just the string literal "$bar.baz".

// T

On Thursday, June 26, 2014 9:25:18 PM UTC+2, Mauro wrote:

Maybe something like this should work: 
>
> julia> macro A() 
>        esc(quote 
>        a=5 
>        b=7 
>        end) 
>        end 
>
> julia> function f(x) 
>        @A 
>        x+a+b 
>        end 
> f (generic function with 1 method) 
>
> julia> f(5) 
> 17 
>
> If you don't want your variable names to be mangled then do the `esc`. 
>
> So, basically just write normal code in the `esc(quote ... end)` bit. 
>
> On Thu, 2014-06-26 at 19:21, [email protected] <javascript:> wrote: 
> > That explains it, thanks. 
> > 
> > In my actual problem, what I wanted to do in the included file was 
> > something like this: 
> > 
> > ``` 
> > sall,sloops,slost,Nbins,psibins,initialhist,finalhist,vols = 
> > jldopen("$datafile.jld") do f 
> >         read(f, "sall"), 
> >         read(f, "sloops"), 
> >         read(f, "sloss"), 
> >         read(f, "Nbins"), 
> >         read(f, "psibins"), 
> >         read(f, "initialhist"), 
> >         read(f, "finalhist"), 
> >         read(f, "vols") 
> > end 
> > ``` 
> > 
> > where `datafile` is the variable defined in the function. In other 
> words, 
> > including the file would define and assign to all those variables. Is it 
> > maybe possible to write a macro that does this? 
> > 
> > // T 
> > 
> > On Thursday, June 26, 2014 8:17:29 PM UTC+2, Simon Kornblith wrote: 
> >> 
> >> include evaluates at top-level, so this would only work if foo were a 
> >> global variable. It not possible to include in a function context for 
> the 
> >> same reason it is not possible to eval in a function context. 
> >> 
> >> Simon 
> >> 
> >> On Thursday, June 26, 2014 1:03:00 PM UTC-4, Tomas Lycken wrote: 
> >>> 
> >>> I have the following two files: 
> >>> 
> >>> *includetest1.jl*: 
> >>> 
> >>> module IncludeTest 
> >>> 
> >>> function testinclude() 
> >>>     foo = "foo" 
> >>>     println(foo) 
> >>>     include("includetest2.jl") 
> >>> end 
> >>> 
> >>> end 
> >>> 
> >>> *includetest2.jl* 
> >>> 
> >>> println(foo) 
> >>> 
> >>> If I now try to execute this the function from the REPL, I get errors 
> >>> stating that foo is not defined: 
> >>> 
> >>> julia> include("includetest1.jl") 
> >>> 
> >>> julia> IncludeTest.testinclude() 
> >>> foo 
> >>> ERROR: foo not defined 
> >>>  in include at boot.jl:244 
> >>> while loading [...]/includetest2.jl, in expression starting on line 1 
> >>> 
> >>> I thought include was supposed to just insert the contents of the file 
> >>> in whatever context you’re in? If include is not the way to do this, 
> is 
> >>> there another? 
> >>> 
> >>> For completeness: 
> >>> 
> >>> 
> >>> julia> versioninfo() 
> >>> Julia Version 0.3.0-prerelease+3884 
> >>> Commit 3e6a6c7* (2014-06-25 10:41 UTC) 
> >>> Platform Info: 
> >>>   System: Linux (x86_64-linux-gnu) 
> >>>   CPU: Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz 
> >>>   WORD_SIZE: 64 
> >>>   BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY) 
> >>>   LAPACK: libopenblas 
> >>>   LIBM: libopenlibm 
> >>> 
> >>> // T 
> >>> ​ 
> >>> 
> >> 
>
> -- 
>
> ​

Reply via email to