gpt4 book ai didi

arrays - 修改继承自 `Array`的类的receiver

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:55 24 4
gpt4 key购买 nike

我有一个类:

class MyArray < Array; end

我想定义一个方法来改变 MyArray 的实例,这样:

arr = MyArray.new([1,2,3,4]) # => [1, 2, 3, 4]
arr.inc # => [2, 3, 4, 5]`

可以吗?怎么会这样?

我试过:

class MyArray < Array
def inc
self.each { |i| i = i + 1 }
end
end

最佳答案

如果您希望 #inc 就地改变 MyArray 实例,您可以使用常规下标语法将修改后的元素写回 self:

class MyArray
def inc
self.each_with_index { |el, idx| self[idx] = el + 1 }
self
end
end

如果你想返回一个新的MyArray实例,你应该使用#map,它返回一个普通的Array,所以把它包起来在你的类的构造函数中:

class MyArray
def inc
self.class.new(self.map { |i| i + 1 })
end
end

关于arrays - 修改继承自 `Array`的类的receiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54079647/

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