You can just look at the docs and define methods required for iteration, see Interfaces · The Julia Language
Here is one implementation:
struct PairIterator{T}
it::Vector{T}
end
# Required method
function Base.iterate(p::PairIterator, i::Int=1)
l = length(p.it)
if i > l
return nothing
else
j = mod(i, l)+1
return (p.it[i], p.it[j]), i+1
end
end
# Important optional methods
Base.eltype(::Type{PairIterator{T}}) where {T} = Tuple{T,T}
Base.length(p::PairIterator) = length(p.it)
Example:
julia> for i in PairIterator([3,4,2,1])
println(i)
end
(3, 4)
(4, 2)
(2, 1)
(1, 3)