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