为什么array.slice的行为(长度,n)不同

如果我有一个数组a

  1. a[a.length]返回nil 。 好。
  2. a[a.length, x]返回[] 。 好。
  3. a[a.length+x, y]返回nil 。 与2不一致。

虽然记录了这种行为,但似乎很奇怪。

任何人都可以解释这个设计背后的原因吗?

考虑一下

 a = [0, 1, 2, 3] #=> [0, 1, 2, 3] a[0, 10] #=> [0, 1, 2, 3] a[1, 10] #=> [1, 2, 3] a[2, 10] #=> [2, 3] a[3, 10] #=> [3] a[4, 10] #=> [] a[5, 10] #=> nil 

所以a[4, 10]3和数组末尾之间的切片,是[]

其中a[4]a[5, 10]访问不在数组中的元素

将切片点视为元素之间而不是元素本身可能会有所帮助。

看看你友好的Lispy语言的答案。 您正在寻找的理念始于其专业是LISt Processing的语言。 例如,这是在Haskell中创建列表的一种方法:

 1:[] => [1] 1:2:3:[] => [1,2,3] 

这被称为consing,用于“构建”列表。 如果想法还没有点击,请考虑这个:通过向空列表添加元素来创建数组,而不是’nil’。