Question:

Is the solution to define "main functions" in the library module and then 
import those functions into the book modules?

Sort of like how you import Base.push! if you want to extend the push! 
function.


On Thursday, May 7, 2015 at 7:43:26 PM UTC+2, Kristoffer Carlsson wrote:
>
> I realized this doesn't work well for me.
>
> The problem with using @lazymod and splitting my "books" into different 
> modules is that I have methods with the same name in the "book" modules.
> This will cause conflicts and I won't get the methods when I import the 
> second book module.
>
> Maybe I could use https://github.com/davidagold/MetaMerge.jl but at this 
> point it seems like an awful amount of work just to be able to do something 
> as simple as not loading the whole package...
>
> Assuming that I have a huge number of different types that all have the 
> same parent abstract type. There is a method for each type operating on the 
> type.
>
> Is it right that there is no way to put this in a package and have a user 
> only load part of the types and methods?
>
>
>
> On Tuesday, May 5, 2015 at 6:52:24 PM UTC+2, Jameson wrote:
>>
>> 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