gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:38 25 4
gpt4 key购买 nike

我不明白为什么在 Ruby 中,Array#sliceArray#slice! 的行为与 Array#sortArray#sort!(一个返回新数组的结果,另一个处理当前对象)。

使用 sort 第一个(没有爆炸),返回当前数组的排序副本,并且 sort! 对当前数组进行排序。

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]

http://ideone.com/77xFva

最佳答案

#slice#slice! 行为是等价的:都“返回一个从 start 索引开始并继续 的子数组length 元素”,与 #sort#sort! 返回排序数组或 #reverse 的方式相同#reverse! 返回一个颠倒的数组。

区别在于 bang 方法还修改了对象本身。

a = [4,2,6,9,1,5,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 - 为什么 Array#slice 和 Array#slice!表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com