`next` requires a second argument, the `state` variable. Your code doesn't 
pass a second argument, which is why you're getting the error.

--Tim

On Tuesday, September 15, 2015 08:18:09 AM Leonardo wrote:
> Sorry,
> but now I have some doubt relative to concatenation for my redefined Array.
> 
> In my exampled (attached) I've redefined AbstractArray creating a simple
> container for an Array, and I redefined also start() / next() / done()
> calling same operations for internal Array, but in following few lines
> of code:
> 
> a = MyArr{2}(1,2)
> a[1,1] = "hello"
> a[1,2] = "world"
> cat(1, a, ["bob" "alice"])
> 
> cat() fails with following error:
> 
> ERROR: MethodError: `next` has no method matching
> next(::Array{AbstractString,2})
> Closest candidates are:
>    next(::Array{T,N}, ::Any)
>    next(::AbstractArray{T,N}, ::Any)
>   in _unsafe_batchsetindex! at multidimensional.jl:328
>   in setindex! at abstractarray.jl:572
>   in cat_t at abstractarray.jl:840
>   in vcat at abstractarray.jl:861
> 
> Anyone can indicate me what MUST be reimplemented for AbstractArray{T,N}
> to support concatenation operations?
> 
> Many thanks in advance
> 
> Leonardo
> 
> Il 13/09/2015 09:48, Leonardo ha scritto:
> > Many thanks!
> > I've understood that parametric type and number of dimension are
> > necessary, then I can write something like:
> > type MyArr{N} <: AbstractArray{String,N}
> > ...
> > end
> > 
> > but, cause I want constructor receives the range of components for
> > each dimension like:
> > a = MyArr{3}(2,3,4)
> > I MUST ensure that parametric dimension be consistent with passed
> > number of indexes, highlighting (with an Error) that forms like:
> > a = MyArr{3}(2,3)
> > are illegal (see my attached example)
> > 
> > (maybe OT: I think that using Integer as Type Parameter is a bit
> > confusing for people like me that have developed by many year in other
> > languages with generics as Java, C++, C# because use of a
> > object-parameter opposed to conventional type-parameter is a bit odd;
> > see also https://groups.google.com/forum/#!topic/julia-users/3NM7tZV5buQ )
> > 
> > Leonardo
> > 
> > P.S. surprisingly chapters
> > http://docs.julialang.org/en/release-0.4/manual/interfaces/ and
> > http://docs.julialang.org/en/latest/manual/interfaces/ are unavailable
> > into relative PDFs on readthedocs.org
> > 
> > Il 11/09/2015 14:46, Matt Bauman ha scritto:
> >> On Friday, September 11, 2015 at 3:11:48 AM UTC-4, Leonardo wrote:
> >>     I like to have a /unique/ type that contains only a specified
> >>     type and that can handle any dimension, but only during object
> >>     instancing (not during subsequent lifecycle of object, also if
> >>     both phases are at runtime), than parametrized dimension (the
> >>     N in AbstractArray{T,N}) is not useful for me.
> >> 
> >> You can have a constructor that deals with the parameter for you:
> >> 
> >> MyArr(number_of_dimensions::Int) = MyArr{Any, number_of_dimensions}()
> >> 
> >> I'm afraid I still don't understand why you want to do this, so my
> >> answers probably aren't all that helpful.
> >> 
> >>     But - if I understood your indications - there is no way to do
> >>     this without redefine a bunch of methods.
> >>     At least, can I find somewhere a minimal list of these methods?
> >> 
> >> That's correct.  Omitting the dimensionality isn't a supported way to
> >> subtype AbstractArray.  I suppose you can still do it, but being
> >> unsupported means that you're on your own to figure out what all
> >> needs to be re-implemented.  And unfortunately, I'm afraid that the
> >> list isn't so minimal.  It's a part of the AbstractArray definition
> >> that is very heavily leveraged in the base code to improve
> >> performance and specify behavior.
> >> 
> >> You can start to get a sense of how heavily these parameters are used
> >> by looking at the methods defined for AbstractArray{T,1}
> >> (AbstractVector) and AbstractArray{T,2} (AbstractMatrix):
> >> 
> >> julia> methodswith(AbstractVector)
> >> 151-element Array{Method,1}: …
> >> 
> >> julia> methodswith(AbstractMatrix)
> >> 164-element Array{Method,1}: …
> >> 
> >> Those don't even include methods defined for arbitrary dimensionality
> >> but still require N to be defined, like
> >> `ndims{T,N}(A::AbstractArray{T,N}) = N`.

Reply via email to