ruby - Monkeypatch 数组并将数组元素设置为新值
问题描述
我正在为 Array 编写一个新方法,即
class Array
def my_new_method!
...
other_array = ....
# Want to set self to other_array. How?
end
end
正如评论所示,我在Array#my_new_method!
一个新数组内进行计算other_array
(在我的情况下,它恰好具有与相同数量的元素self
),并且我想将 Array 的所有元素设置self
为other_array
. 当然我可以做一个
other_array.each_with_index |element, i|
self[i] = element
end
但也许有更简单的方法?我查找了这些方法map!
,fill
这些方法似乎朝着相似的方向发展,但看不到如何在我的案例中合理地应用它们。
例如,如果我有
a=[2,6,4]
我做了一个
a.my_new_method!
在里面my_new_method!
,other_array
结果是[1,2,3],我希望a也是[1,2,3]。这个例子看起来有点做作,因为 ifmy_new_method!
不会是 Array 的实例方法,而是一些外部 Method,
a = my_new_method(a)
会做的工作。就我而言,这无济于事,因为我无法做到
self = other_array
里面my_new_method!
。
解决方案
您可以调用replace
以将数组的内容替换为另一个数组的内容:
class Array
def my_new_method!
other = [1, 2, 3]
replace(other)
end
end
a = [:foo, :bar, :baz]
a.my_new_method!
a #=> [1, 2, 3]
推荐阅读
- r - 如何将自定义函数应用于数据集中的每个值
- python - 使用 Python 将 JSON 转换为 CSV
- android - 在 Ionic Capacitor 应用程序中,如何在 android 中禁用长按 WebView 文本选择
- javascript - 笑话:模拟一个特定的 ES6 类方法
- python - 无法理解 PCA 如何实现图像压缩和降维
- r - 将重复的行变成R中的列
- python - python将这些打印值转换为字典,键是第一列,按钮是字典值
- ios - 使用 PHImageManager 导出视频文件失败:AVFoundationErrorDomain Code=-11800 "The operation could not be completed" Code=-12212
- javascript - 无法使用 Cheerio 抓取某些元素
- python-3.x - Python 用 selenium 提取浏览器下拉列表