ruby – 为什么Array#slice和Array#slice!表现不同?

前端之家收集整理的这篇文章主要介绍了ruby – 为什么Array#slice和Array#slice!表现不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法理解为什么,在 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]

http://ideone.com/77xFva

解决方法

#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

猜你在找的Ruby相关文章