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]