在Julia中,您可以声明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
存在该功能的实际或理论原因吗?我从未用过我使用过的其他任何语言(Python,Ruby,Matlab,C ++)看到它。
答案 0 :(得分:5)
原因有两个:
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
,请注意,为容器定义的标准函数是为数字定义的,其行为与0
维对象相同,例如:
julia> size(a)
()
julia> axes(a)
()
有一个open PR,提供了更多有关省略和多余索引如何工作的详细信息。