Also see https://github.com/JuliaLang/julia/pull/6884

On Tue, May 5, 2015 at 12:52 PM Kristoffer Carlsson <[email protected]>
wrote:

> Thank you for the link. My current structure is now then:
>
> # MyPackage.jl
> module MyPackage
>
> export foo, AbstractBook
>
> include("required.jl")
> include("library.jl")
> end
>
> # required.jl
> abstract AbstractBook
> foo(a::AbstractBook) = print(a)
>
> # library.jl
> module Library
>
> using Requires
>
> @lazymod BookModule1 "book1.jl"
> @lazymod BookModule" "book2.jl"
>
> end
>
>
> # book1.jl
> module BookModule1
> using MyPackage
> export Book1
> type Book1 <: AbstractBook
> end
>
> # book2.jl
> module BookModule2
> using MyPackage
> export Book2
> type Book2 <: AbstractBook
> end
>
> I can then load the Book1Mod using
>
> julia> MyPackage.Library.bookmodule1()
> MyPackage.Library.BookModule1
>
>
> which is a little bit uglier than what I would like but it works!
>
> Thanks!
>
> // Kristoffer
>
> On Tuesday, May 5, 2015 at 6:12:35 PM UTC+2, Isaiah wrote:
>
>> Have a look at https://github.com/one-more-minute/Requires.jl
>>
>
>> On Tue, May 5, 2015 at 12:04 PM, Kristoffer Carlsson <[email protected]>
>> wrote:
>>
>>> I have a package where some functionality should always be loaded when
>>> writing the normal "using MyPackage" and some functionality needs to be
>>> explicitly loaded. The use case for me is that I have a library of
>>> different things (let's call them books) and it is likely that only a few
>>> books from this library are used and I want to reduce the loading time of
>>> the package.
>>>
>>> To make it concrete let's assume I currently have the following
>>> file/module structure:
>>> # MyPackage.jl
>>> module MyPackage
>>> export foo
>>> include("required.jl")
>>> include("library.jl")
>>> end
>>>
>>> # required.jl
>>> abstract AbstractBook
>>> foo(a::AbstractBook) = print(a)
>>>
>>> # library.jl
>>>
>>> include("book1.jl")
>>> include("book2.jl")
>>>
>>> # book1.jl
>>> type Book1 <: AbstractBook
>>>
>>> # book2.jl (oh boy...)
>>> using Gadfly
>>> using Winston
>>> using Images
>>> using PyCall
>>> type Book2 <: AbstractBook
>>>
>>> Now, I want my usage of the package to look something like this:
>>> using MyPackage # Loads everything required
>>> using MyPackage.Library.Book1 # Only loads book1.jl, book2.jl is not
>>> touched, fast loading
>>>
>>> Foo(Book1())
>>>
>>> I guess I have to put my books into their own separate modules, akin:
>>>
>>> # MyPackage.jl
>>> module MyPackage
>>> export foo
>>> include("required.jl")
>>> end
>>>
>>> # required.jl
>>> abstract AbstractBook
>>> foo(a::AbstractBook) = print(a)
>>>
>>> # book1.jl
>>> module BookModule1
>>> using MyPackage
>>> export Book1
>>> type Book1 <: AbstractBook
>>> end
>>>
>>> # book2.jl
>>> module BookModule2
>>> using MyPackage
>>> export Book2
>>> type Book2 <: AbstractBook
>>> end
>>>
>>> But now there is no convenient way to load the book modules?
>>>
>>> Can anyone help me how to properly structure this? A link to a package
>>> that does this will likely work just fine.
>>>
>>> Best regards,
>>> Kristoffer Carlsson
>>>
>>
>>

Reply via email to