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

时间:2018-08-13 21:13:06

标签: julia

我尝试读Julia code,让OOP强类型化backgrownd。我得到了大部分,但UnitRange{Int};及其使用方式对我来说还不清楚:它是数组还是整数?有人可以用某种强类型语言呈现UnitRange类型的类似物吗?

1 个答案:

答案 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