在朱莉娅,你可以声明Int64,Bool或Float64和索引它1.
julia> aa = 10
10
julia> typeof(10)
Int64
julia> aa[1]
10
julia> aa[0]
ERROR: BoundsError
Stacktrace:
[1] getindex(::Int64, ::Int64) at .\number.jl:78
[2] top-level scope at none:0
julia> aa[2]
ERROR: BoundsError
Stacktrace:
[1] getindex(::Int64, ::Int64) at .\number.jl:78
[2] top-level scope at none:0
Run Code Online (Sandbox Code Playgroud)
这个功能存在的实际或理论原因是什么?我从未见过我用过的任何其他语言(Python,Ruby,Matlab,C++).
原因有两个:
0维度容器处理.1维度索引号,getindex则它不是错误,即使1超出容器的维度.这两个规则组合会导致您描述的行为.以下是一些相同的例子:
julia> a = 1
1
julia> b = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> a[]
1
julia> a[1,1,1,1]
1
julia> b[2,1,1,1,1]
2
Run Code Online (Sandbox Code Playgroud)
并注意为容器定义的标准函数是为数字定义的,并且表现为 - 0维对象,例如:
julia> size(a)
()
julia> axes(a)
()
Run Code Online (Sandbox Code Playgroud)
有一个开放的PR,它提供了有关省略和额外索引如何工作的更多细节.