Julia中的UnitRange类型是什么意思?

Duc*_*een 2 julia

我尝试阅读具有OOP强类型背景的Julia代码.我得到了大部分,然而UnitRange{Int};它的使用方式对我来说并不清楚:它是一个数组还是一个整数?任何人都能UnitRange用某种强类型语言呈现类型的类比吗?

crs*_*nbr 8

我们来看看吧.我们可以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.

  • 确实.另一种方法是点击文档https://docs.julialang.org/en/stable/base/collections/#Base.UnitRange中的"source". (2认同)
  • 但我喜欢`@ which`和`@ edit`宏:) (2认同)