在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
维容器。 - 如果在
getindex
中添加1
作为维度索引号,则即使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)
()
有一个开放的 PR,提供了省略索引和额外索引如何工作的更多详细信息。