当应用
float
到一个区间时,你会看到这个结果:
julia> 1:10
1:10
julia> float(1:10)
1.0:1.0:10.0
在将4/1
(4.0
)添加到Float64之前,需要进行此推广。
同样,在将整数添加到浮点数julia时,“提升”整数以便在添加/减去之前与浮点数相加:
julia> 1 + 2.0
3.0
julia> @which 1 + 2.0
+(x::Number, y::Number) at promotion.jl:172
请查看升级规则:
+(x::Number, y::Number) = +(promote(x,y)...)
您可以一直跟踪函数调用,直到了解发生了什么(一直跟踪到以下位置):
julia> @which +(1:10, 2.0)
+(A::AbstractArray{T,N}, x::Number) at arraymath.jl
julia> @which .+(1:10, 2.0)
.+(r::Range{T}, x::Real) at range.jl
julia> @which .+(2.0, 1:10)
.+(x::Real, r::UnitRange{T<:Real}) at range.jl
.+(x::Real, r::UnitRange) = range(x + r.start, length(r))
因此,需要进行Int64和Float64的推广添加。
请注意,在主版本中,间隔的显示略微不那么混乱/含糊。
julia> float(1:10)
10-element FloatRange{Float64}:
1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0
julia> 1:10
10-element UnitRange{Int64}:
1,2,3,4,5,6,7,8,9,10
1:10 === 1:1:10
不正确,只有1:10 == 1:1:10
才对。前者是UnitRange
,后者是StepRange
。另外,值得一提的是isa(1:10,AbstractVector) # => true
。 - Andreas Noack1:10 !== 1:1:10
的评论,实际上那是个笔误,我已经修改了。现在1:10 == 1:1:10 # => true
。 - Reza Afzalan