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

为什么Julia Int64、Float64和boolean支持getindex,julia,Julia,在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>

在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++)中见过它。

原因有两个:

  • Julia将数字视为
    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)
    ()
    

    有一个例子给出了省略索引和额外索引如何工作的更多细节。

    实际上,在Matlab中您会看到完全相同的情况。在Matlab中,标量只是1x1矩阵。