Perfect, thanks.

  Jared Crean

On Wednesday, October 12, 2016 at 2:40:03 PM UTC-4, harven wrote:
>
>
>
> Le mercredi 12 octobre 2016 01:45:25 UTC+2, Jared Crean a écrit :
>>
>> Very nice summary, thanks for posting.  One question I had was what 
>> should the signature of a function be to receive a generator?  For example, 
>> if the only method of extrema is extrema(A::AbstractArray), is that too 
>> restrictive?
>>
>>   Jared Crean
>>
>>
> Any functions working with iterables will work with generators. 
>
> julia> methods(extrema)
> # 4 methods for generic function "extrema":
> extrema(r::Range) at reduce.jl:345
> extrema(x::Real) at reduce.jl:346
> extrema(A::AbstractArray, dims) at reduce.jl:388
> extrema(itr) at reduce.jl:362
>
>
> The last line tells you that extrema will work. An object is iterable if 
> it implements the methods start, next and done. There are in fact a few 
> other objects that also work on generators.
>
>  julia> methodswith(Base.Generator)
> 8-element Array{Method,1}:
>  collect(itr::Base.Generator) at array.jl:298 
>  done(g::Base.Generator, s) at generator.jl:22
>  indices(g::Base.Generator) at generator.jl:91
>  length(g::Base.Generator) at generator.jl:89 
>  ndims(g::Base.Generator) at generator.jl:92  
>  next(g::Base.Generator, s) at generator.jl:24
>  size(g::Base.Generator) at generator.jl:90   
>  start(g::Base.Generator) at generator.jl:21  
>
> There are a few functions that work on arrays but not on iterables. You 
> should not expect these to work on generators.
>
> julia> show(reverse([1:10;]))
> [10,9,8,7,6,5,4,3,2,1]
> julia> show(reverse(i for i = 1:10))
> ERROR: MethodError: no method matching 
> reverse(::Base.Generator{UnitRange{Int64},##9#10})
> Closest candidates are:
>   reverse(!Matched::String) at strings/string.jl:209
>   reverse(!Matched::BitArray{1}) at bitarray.jl:1416
>   reverse(!Matched::Tuple) at tuple.jl:199
>   ...
>

Reply via email to