加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:17:19 所属栏目:百科 来源:网络整理
导读:我无法理解为什么,在 Ruby中,Array#slice和Array#slice!表现与Array#sort和Array#sort不同! (以一种方式返回新数组的结果,另一种方式处理当前对象). 排序第一个(没有爆炸),返回当前数组的排序副本,并排序!对当前数组进行排序. 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读