Arrays 修改从`数组继承的类的接收器`

Arrays 修改从`数组继承的类的接收器`,arrays,ruby,Arrays,Ruby,我有一门课: class MyArray < Array; end 能做到吗?怎么会这样 我试过: class MyArray < Array def inc self.each { |i| i = i + 1 } end end 类MyArray

我有一门课:

class MyArray < Array; end
能做到吗?怎么会这样

我试过:

class MyArray < Array
  def inc
    self.each { |i| i = i + 1 }
  end
end
类MyArray
如果希望
#inc
修改MyArray实例,可以使用常规下标语法将修改后的元素写回
self

class MyArray
  def inc
    self.each_with_index { |el, idx| self[idx] = el + 1 }
    self
  end
end
如果要返回
MyArray
的新实例,应使用
#map
,它返回一个常规
数组
,因此将其包装在类的构造函数中:

class MyArray
  def inc
    self.class.new(self.map { |i| i + 1 })
  end
end
类MyArray[2,3,4,5]

类MyArray[2,3,4,5]

。OP显然不“想返回
MyArray的新实例”
。您可以添加解释吗?我可以看出它是有效的,但是
replace
做什么呢?它用给定的参数替换接收者的内容。如果不确定,请查看文档。
class MyArray
  def inc
    self.class.new(self.map { |i| i + 1 })
  end
end
class MyArray < Array
  def inc
    each_index{|i| self[i] += 1}
  end
end

arr = MyArray.new([1, 2, 3, 4])
arr.inc # => [2, 3, 4, 5]
class MyArray < Array
  def inc
    replace(map(&:succ))
  end
end

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