我尝试读Julia code,让OOP强类型化backgrownd。我得到了大部分,但UnitRange{Int};
及其使用方式对我来说还不清楚:它是数组还是整数?有人可以用某种强类型语言呈现UnitRange
类型的类似物吗?
答案 0 :(得分:8)
让我们看看。我们可以通过调用其构造函数来显式创建UnitRange{Int}
julia> UnitRange{Int}(3,5) # equivalent to just saying 3:5
3:5
julia> typeof(ans)
UnitRange{Int64}
使用@which
宏,我们可以找到构造函数和类型的定义位置:
julia> @which UnitRange{Int}(3,5)
(::Type{UnitRange{T}})(start, stop) where T<:Real in Base at range.jl:255
即在range.jl
第255行中。我们发现(@edit
可能有用):
struct UnitRange{T<:Real} <: AbstractUnitRange{T}
start::T
stop::T
UnitRange{T}(start, stop) where {T<:Real} = new(start, unitrange_last(start,stop))
end
因此,T = Int64
的确是两个整数。使用相同的技术,我们可以发现UnitRange
的迭代和索引是从563行开始的同一文件中定义的。因此,UnitRange{Int}
是具有两个整数字段的类型,该整数字段定义了索引和迭代器接口。有关接口的更多信息,请参见https://docs.julialang.org/en/stable/manual/interfaces/index.html。