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

3
我尝试阅读具有强类型OOP背景的Julia代码。我理解了大部分内容,但是UnitRange{Int};及其使用方式对我来说不太清楚:它是一个数组还是只是一个整数?是否有人能在某个强类型语言中提供UnitRange类型的类比?
1个回答

10

让我们来看一下。我们可以通过调用其构造函数来显式地创建一个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,它实际上是两个整数。使用相同的技术,我们可以发现从第563行开始,UnitRange 的迭代和索引在同一文件中定义。因此,UnitRange{Int} 是一个具有两个整数字段的类型,它定义了一个索引和迭代器接口。有关接口的更多信息,请参见https://docs.julialang.org/en/stable/manual/interfaces/index.html。请注意保留 HTML 标签。

您也可以这样做:julia> fieldnames(UnitRange{Int64}) # (:start, :stop) - HarmonicaMuse
2
确实。另一种方法是在文档 https://docs.julialang.org/en/stable/base/collections/#Base.UnitRange 中单击“源”。 - carstenbauer
如果你只想查看代码,稍微“安全”一点的方法是使用@less,它只会打开一个分页器,而不是用编辑器打开文件。 :) - HarmonicaMuse
@crstnbr:喜欢文档链接 - 无法直接使用“UnitRange Julia”进行谷歌搜索... - DuckQueen
很高兴能够帮助。 - carstenbauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接