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?
>>
>
>