我尝试阅读具有OOP强类型背景的Julia代码.我得到了大部分,然而UnitRange{Int};它的使用方式对我来说并不清楚:它是一个数组还是一个整数?任何人都能UnitRange用某种强类型语言呈现类型的类比吗?
我们来看看吧.我们可以UnitRange{Int}通过调用它的构造函数来显式创建
julia> UnitRange{Int}(3,5) # equivalent to just saying 3:5
3:5
julia> typeof(ans)
UnitRange{Int64}
Run Code Online (Sandbox Code Playgroud)
使用@which宏我们可以找出构造函数和类型的定义位置:
julia> @which UnitRange{Int}(3,5)
(::Type{UnitRange{T}})(start, stop) where T<:Real in Base at range.jl:255
Run Code Online (Sandbox Code Playgroud)
即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
Run Code Online (Sandbox Code Playgroud)
因此它确实是两个整数T = Int64.使用相同的技术,我们可以发现UnitRanges的迭代和索引是在第563行的同一文件中定义的.因此,a UnitRange{Int}是一个具有两个整数字段的类型,它定义了索引和迭代器接口.有关接口的更多信息,请参阅https://docs.julialang.org/en/stable/manual/interfaces/index.html.