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

时间:2019-01-24 16:55:56

标签: julia

在Julia中,您可以声明Int64BoolFloat64并用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 ++)看到它。

1 个答案:

答案 0 :(得分: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

,请注意,为容器定义的标准函数是为数字定义的,其行为与0维对象相同,例如:

julia> size(a)
()

julia> axes(a)
()

有一个open PR,提供了更多有关省略和多余索引如何工作的详细信息。