我无法理解为什么,在
Ruby中,Array#slice和Array#slice!表现与Array#sort和Array#sort不同! (以一种方式返回新数组的结果,另一种方式处理当前对象).
排序第一个(没有爆炸),返回当前数组的排序副本,并排序!对当前数组进行排序.
slice,返回具有指定范围的数组,并切片!从当前对象中删除指定的范围.
Array#slice的原因是什么!表现得像这样,而不是使当前对象成为具有指定范围的数组?
例:
a = [0,1,2,3,4,5,6,7,8,9] b = a.slice( 2,2 ) puts "slice:" puts " a = " + a.inspect puts " b = " + b.inspect b = a.slice!(2,2) puts "slice!:" puts " a = " + a.inspect puts " b = " + b.inspect
输出:
slice: a = [0,9] b = [2,3] slice!: a = [0,3]
解决方法
#slice和#slice!行为是等价的:“返回从起始索引开始的子数组并继续长度元素”,与#sort和#sort一样!返回一个排序数组或#reverse和#reverse!返回一个反向数组.
a = [4,9,8] b = a.dup a.sort == b.sort! # => true a == b # => false b = a.dup a.reverse == b.reverse! # => true a == b # => false b = a.dup a.slice(2,2) == b.slice!(2,2) # => true a == b # => false