Thanks Stefan, although I feel like 
julia> x = SelfRef()
1-element Array{SelfRef,1}:
SelfRef([SelfRef(#= circular reference =#)])

Should not return an array of type SelfRef. It should return just an 
instance of itself
As it stands, to get the behavior I want I need to call it like
julia> x=SelfRef()[1]
SelfRef([SelfRef(#= circular reference =#)])

julia> x.objs
1-element Array{SelfRef,1}:
 SelfRef([SelfRef(#= circular reference =#)])

julia> push!(x.objs,SelfRef()[1])
2-element Array{SelfRef,1}:
 SelfRef([SelfRef(#= circular reference =#),SelfRef([SelfRef(#= circular 
reference =#)])])
 SelfRef([SelfRef(#= circular reference =#)]) 


On Wednesday, June 18, 2014 12:24:34 PM UTC-7, Stefan Karpinski wrote:
>
> This works:
>
> julia> type SelfRef
>            objs::Array{SelfRef,1}
>            function SelfRef()
>                x = new()
>                x.objs = [x]
>            end
>        end
>
> julia> x = SelfRef()
> 1-element Array{SelfRef,1}:
>  SelfRef([SelfRef(#= circular reference =#)])
>
>
> A couple of points:
>
> The type Array{SelfRef,0} is a zero-dimensional array of SelfRef objects, 
> not a zero-length one-dimensional array of SelfRef objects. The type of a 
> one-dimensional array of SelfRef objects is Array{SelfRef,1} – aka 
> Vector{SelfRef}.
>
> The first argument to the Array constructor is always a type, whereas x is 
> an instance of type SelfRef. Writing [x] gives a vector of type SelfRef 
> containing just x.
>
>
>
> On Wed, Jun 18, 2014 at 4:32 AM, Luke Stagner <[email protected] 
> <javascript:>> wrote:
>
>> Hello all,
>>
>> I know it is possible to have a self-referential type like the following
>>
>> type SelfRef
>>    obj::SelfRef
>>    SelfRef() = (x=new(); x.obj=x)
>> end
>>
>> what I want to do is have obj be an array of type SelfRef so I can make a 
>> tree-like structure. I tried the following
>>
>> type SelfRef
>>    obj::Array{SelfRef,0}
>>    SelfRef() = (x=new(); x.obj=Array(x,0))
>> end
>>
>> but that throws the following error (on nightly)
>> julia> a=SelfRef()
>> ERROR: no method Array{T,N}(SelfRef)
>>  in SelfRef at none:3
>>
>> Is there anyway I can make this work? 
>>
>
>

Reply via email to