【发布时间】:2022-01-05 19:56:59
【问题描述】:
在练习 ruby 时,我写了一个这样的类:
class Array
def my_each
c = 0
until c == size
yield self[c]
c += 1
end
end
def my_map
c = 0
acc = []
my_each {|e| acc << yield(e)}
acc
end
end
def plus_two(a)
a += 2
end
nums = [1, 2, 3, 4, 5]
nums.my_map {|e| plus_two(e)}
p nums
效果很好,符合预期。但是,我想实现修改实例的Array#my_map!,但我不知道如何以这种方式修改现有数组。
据我所知(我是一名有 Java 经验的初学者 Ruby 开发人员)我们可以通过 @ 访问实例变量,但在这种情况下,我想不出最佳实践。解决这种情况的体面方法是什么?
谢谢。
【问题讨论】:
-
如果你增加
c,你可以使用self[c] = new_value来设置索引c的值 -
c是迭代器索引。我们正在迭代 self 实例以一个一个地产生对象。 -
是的,您可以将来自
yield的结果通过self[c] = …存储回数组。 -
好主意!谢谢。