diff --git a/base/generator.jl b/base/generator.jl index 0ddeb30f7464c..f10c46bb0704a 100644 --- a/base/generator.jl +++ b/base/generator.jl @@ -50,6 +50,8 @@ length(g::Generator) = length(g.iter) size(g::Generator) = size(g.iter) axes(g::Generator) = axes(g.iter) ndims(g::Generator) = ndims(g.iter) +keys(g::Generator) = g.iter +getindex(g::Generator, i) = g.f(i) ## iterator traits diff --git a/base/iterators.jl b/base/iterators.jl index 1ce2d65264d01..b86d8eeb2b317 100644 --- a/base/iterators.jl +++ b/base/iterators.jl @@ -224,6 +224,7 @@ pairs(A::AbstractArray) = pairs(IndexCartesian(), A) pairs(A::AbstractVector) = pairs(IndexLinear(), A) pairs(tuple::Tuple) = Pairs(tuple, keys(tuple)) pairs(nt::NamedTuple) = Pairs(nt, keys(nt)) +pairs(g::Generator) = Pairs(g, keys(g)) # pairs(v::Pairs) = v # listed for reference, but already defined from being an AbstractDict length(v::Pairs) = length(v.itr)