遍历
内部实现
遍历的定义通过定义 iterate
函数的两个方法实现。
在进行 for ... in
循环时,
for item in iter # 或 "for item = iter"
# body
end
被解释为:[1]
next = iterate(iter)
while next !== nothing
(item, state) = next
# body
next = iterate(iter, state)
end
样例
struct n3
v::Int
end
function Base.iterate(i::n3, n::Int=i.v) # 第一次调用时不会有第二个参数
if n==1
return nothing # 表示结束
end
v= n&1==0 ? n>>1 : n*3+1
return (v, v) # (返回值,下一个状态(作为第二个参数))
end
julia> for i in n3(10)
print(i, ' ')
end
5 16 8 4 2 1
julia> [n3(10)...]
6-element Vector{Int64}:
5
16
8
4
2
1
- 1
https://docs.juliacn.com/latest/manual/interfaces