我尝试阅读具有强类型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}
@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@less
,它只会打开一个分页器,而不是用编辑器打开文件。 :) - HarmonicaMuse