为什么array.slice的行为(长度,n)不同
如果我有一个数组a
:
-
a[a.length]
返回nil
。 好。 -
a[a.length, x]
返回[]
。 好。 -
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’。