i suspect that's by accident rather than design.  it also fails on trunk 
with the error:

ERROR: syntax: "counter=0" inside type definition is reserved  

andrew

On Thursday, 9 July 2015 14:19:56 UTC-3, Josh Karges wrote:
>
> Super late to the party here.  But this is an interesting side effect of 
> how julia handles composite types.
>
> If you initialize a variable inside the type definition block it won't get 
> added as a field to the type, but it still gets stored in memory that can 
> be accessed by any inner constructors.
>
> For example:
>
> type myTyp
>   id
>   counter = 0
>   myTyp() = new(counter+=1)
> end
>
> a = myTyp(); #outputs a myTyp instance with id=1
> b = myTyp(); #outputs a myTyp instance with id=2
> b = myTyp(); #outputs a myTyp instance with id=3...
>
> The behavior is similar to how class static variables behave in oo 
> languages.
>
> On Saturday, December 21, 2013 at 4:37:10 AM UTC-5, Marcus wrote:
>>
>> I am a little confused about constructing composite types. Given the 
>> definition
>>
>> type MyType
>> x::Int
>> y::Int = 6
>> MyType() = new()
>> end
>>
>> an instance of MyType can be created using
>>
>> m = MyType()
>>
>> At that point, m.x acts as expected --- I can assign to it, read its 
>> value, and so forth. However, attempting to access m.y produces an error 
>> that MyType has no field y. Based on another post, I gather that my attempt 
>> to provide a value to m.y in this manner is not allowed If that's the case, 
>> what exactly is the effect of "y::Int = 6" If this part of the code is 
>> completely ignored, it would be really nice if the system let me know since 
>> initializing fields in this way is common in many languages.
>>
>> Also, I gather that a workaround is to use a constructor that takes named 
>> arguments. Is that still the recommended way? With just two fields, things 
>> are not difficult, but if the type has 20, calling a constructor with 20 
>> positional arguments would be difficult.
>>
>>
>>

Reply via email to