我不明白为什么在Ruby中,Array#slice
和Array#slice!
的行为与Array#sort
和Array#sort!
的行为不同(以一种方式返回一个新数组的结果而另一个对当前对象起作用)。为什么Array#slice和Array#slice!行为有所不同?
随着sort
第一个(没有爆炸),返回当前数组的排序副本,并sort!
排序当前数组。
slice
,返回与指定的范围内的阵列,和slice!
删除从当前对象在指定的范围。
Array#slice!
的行为如何,而不是使当前对象成为具有指定范围的Array?
实施例:
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, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [2, 3]
slice!:
a = [0, 1, 4, 5, 6, 7, 8, 9]
b = [2, 3]
使用'!'在一个方法上没有设置行为,它只是在那里表明该方法以某种方式改变了输入,同时也具有完全相同的输出。您可以将其添加到您编写的任何方法的末尾。 – tpbowden