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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |