请教个问题,为什么从大到小的 range 和其他 range 合并会失败,如下
julia> [range(9,4); range(1,3)]
3-element Vector{Int64}:
1
2
3
julia> [range(1,3); range(9,4)]
3-element Vector{Int64}:
1
2
3
julia> [range(1,3); range(2,4)]
6-element Vector{Int64}:
1
2
3
2
3
4
请教个问题,为什么从大到小的 range 和其他 range 合并会失败,如下
julia> [range(9,4); range(1,3)]
3-element Vector{Int64}:
1
2
3
julia> [range(1,3); range(9,4)]
3-element Vector{Int64}:
1
2
3
julia> [range(1,3); range(2,4)]
6-element Vector{Int64}:
1
2
3
2
3
4
我猜测是 range(9,4)
会返回一个空的 range
,比如 collect(9:4) == Int64[]
,而 collect(range(1, 3)) = [1; 2; 3]
。如果你想表达一个反序的 range
,需要加上 step
参数,比如 collect(range(9, 4, step=-1)) == [9, 8, 7, 6, 5, 4]
。
因此你提出的问题可能可以这样解决:
julia> [range(9, 4, step=-1); range(1, 3)]
9-element Vector{Int64}:
9
8
7
6
5
4
1
2
3
您说的对。我的错,之前看到下面的结果,没仔细看,以为能正常用。但这里显示 9:8 也有些奇怪。
julia> range(9,4)
9:8
julia> UnitRange(9,4)
9:8
julia> Base.unitrange_last(9,4)
8
为什么这样设计,我还没查到。
不过看到定义 unitrange_last = start - 1
这个可以查 gitblame,最早应该是 eliminate 2nd type parameter from UnitRange · JuliaLang/julia@4b1c9d6 · GitHub 不过话说改的次数是真的多