因此,如果切片发生变化,原始数组也会发生变化吗?
a = [1, 2, 3]
b = a[1, 2]
b[0] = 42 # due to COW, only b changes, a remains unchanged
预期结果:运行b[0] = 42
时,a[1]
也会更改为42。
编辑:有没有这个库?
例如:
a = [1, 2, 3]
b = ArraySlice.new(a, 1, 2)
... # changes in b will be reflected in a
P.S。我是Ruby的新手。我想要的基本上与Java的ByteBuffer.slice相同。有时这很有用,因为我们可以避免创建太多新的数组对象。
答案 0 :(得分:2)
在核心库或标准库中没有类似的东西,我也不知道任何第三方库。你必须自己动手,这样的事情可能是:
Enumerable.Range(1, 10).Select(n => n%2 == 0).ToString().ToList().ForEach(Console.WriteLine);
答案 1 :(得分:1)
我认为这是不可能的。虽然a和b引用相同的对象,但引用本身是不同的。因此,更新一个参考不会更新另一个参考。如果您更改基础对象,则它们会按预期运行。
a = [{}, {}, {}]
b = a[1,2]
b[0][:copy?] = true
puts a.inspect
#[{}, {:copy?=>true}, {}]
答案 2 :(得分:0)
答案 3 :(得分:0)
a = ["a", "b", "c"]
b = a[1, 2]
b.each{|str| str << "!"}
p a # => ["a", "b!", "c!"]
对整数等不可变对象不起作用。