【发布时间】:2014-01-25 11:21:07
【问题描述】:
我不明白为什么在 Ruby 中,Array#slice 和 Array#slice! 的行为与 Array#sort 和 Array#sort! 不同(其中一个在新数组上返回结果,而另一个在当前对象上工作)。
sort 第一个(不带 bang)返回当前 Array 的排序副本,sort! 对当前 Array 进行排序。
slice,返回一个指定范围的数组,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, 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]
【问题讨论】:
-
在方法上使用
!没有固定的行为,它只是表明该方法以某种方式改变了输入,同时也具有完全相同的输出。您可以将其添加到您编写的任何方法的末尾。
标签: ruby behavior design-decisions