That was exactly what I didn't want to see. This approach is so dirty that
I feel like earth worm just by looking at this.
I am pretty sure that julia devs share my disgust :)
Dne čtvrtek 12. května 2016 17:29:01 UTC+2 Sisyphuss napsal(a):
>
> I have tried to use Julia module as static class. According to my
> experience, it is doable. You cannot have two modules of the same names
> though. When it comes to your example, it means you can't have two apples
> (this apple and that apple).
>
> I am afraid you should use immutable Apple type.
> immutable Apple
> s::float64
> t::float64
> Apple(a,b) = s > 0 ? new(a,b) : error("size should be positive")
> end
>
> Apple()= Apple(rand(),rand())
> size(x::Apple) = x.s
> taste(x::Apple) = x.t
>
> a = Apple()
> size(a)
> taste(a)
>
>
>
> On Thursday, May 12, 2016 at 4:26:50 PM UTC+2, Ford Ox wrote:
>>
>> I have checked julia git, but some questions still remain.
>>
>> Should I use module as class substitution? (Every global variable in
>> module is encapsulated. Same for function unless one uses export).
>> In that case where is my constructor?
>>
>> In OO languages you know exactly what methods every object has (in IDE
>> you can use CTRL+Space). How can I do that, or should I need to do that in
>> julia?
>>
>> Let's say I create a module called Apple, with methods taste() and
>> size(), and somebody wants to use that module. Methods taste() and size()
>> are obviously just getters for variables that are somehow stored in Apple
>> module. The user should be never able to change size and taste of apple by
>> himself, those values will be randomly set when constructor is called.
>> How do I encapsulate those two variables? Where do I store those two
>> variables (If I store them in type, user must be able to pass that type
>> into Apple methods, thus he can just do AppleType.size = 6). How do I call
>> constructor if variables are not stored in type?
>> Note: I don't want to have immutable AppleType!
>>
>