为什么Julia Int64,Float64和boolean支持getindex

Sea*_*123 4 julia

在朱莉娅,你可以声明Int64,BoolFloat64和索引它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++).

Bog*_*ski 5

原因有两个:

  1. 数字由Julia作为0维度容器处理.
  2. 如果您在其中添加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,它提供了有关省略和额外索引如何工作的更多细节.