问题:定义类型的迭代规则后,执行 collect
返回 Any
类型列表。但更合适的返回结果是 Vector{Int}
,除了派发 collect
,有其他方法来设置返回类型吗?
举个栗子
struct Foo data::Vector{Int} end
import Base: length, iterate
length(p::Foo) = length(p.data)
iterate(p::Foo) = iterate(p.data)
iterate(p::Foo, i) = iterate(p.data, i)
执行 collect
julia> foo = Foo([1,2,3]);collect(foo)
3-element Vector{Any}:
1
2
3
用 map
,列表生成器或迭代器都能够正常返回 Int
,比如
julia> collect(i for i in foo)
3-element Vector{Int64}:
1
2
3
另外,用 @edit
查看,背后调用了两个函数
# @edit collect(foo))
collect(itr) = _collect(1:1 #= Array =#, itr, IteratorEltype(itr), IteratorSize(itr))