the following works..

first, defining module AB:

module A
export foo
foo() = println("a")
end

module B
export foo
foo() = println("b")
end

module AB
if Main.USE_A
    using A
else
    using B
end
export foo
end

that depends on Main.USE_A, where Main is the initial module when things 
start up,  so then you can do:

USE_A = true

include("ab.jl")

using AB
foo()

which prints "a".

no idea if this is considered kosher...

andrew




On Sunday, 13 September 2015 21:45:57 UTC-3, andrew cooke wrote:
>
>
> i don't know of a good way to do this.
>
> really, parameterised modules would be great.
>
> the simplest thing i can think of is if modules are first class and using 
> etal can take an expression, but the following doesn't run:
>
> module A
> foo() = println("a")
> end
>
> module B
> foo() = println("b")
> end
>
> module AB
> m(x) = x ? A : B
> end
>
> using AB
> using m(true)
> foo()  # wouldn't it be nice if this printed "a"?
>
> andrew
>
>
> On Sunday, 13 September 2015 19:33:16 UTC-3, Seth wrote:
>>
>> Hi all,
>>
>> I'd like to track a setting throughout my module (that will cause the 
>> [transparent] dispatch of either single-threaded or parallel versions of 
>> many different functions). Is there a more Julian way of doing the 
>> following? This seems inelegant:
>>
>> _parallel = false    # start off without parallelism - user calls 
>> parallelize() to set/unset.
>>
>> function parallelize(p::Bool=true)
>>     global _parallel = p
>> end
>>
>>
>> function foo(a::Int) # there will be many functions like this
>>   if _parallel
>>      _foo_parallel(a)
>>   else
>>     _foo_singlethread(a)
>>   end
>> end
>>
>>

Reply via email to