我想使用一些方便的 util 方法;特别是Enumerable#to_a
在满足Enumerable
合同(即实施each
)的对象上,但不包括Enumerable
.
我发现这似乎可行:
Enumerable.instance_method(:to_a).bind(obj).call
但这似乎真的很罗嗦而且不像Rubyesque。有没有更好/更清洁/更快的方法来做到这一点?我宁愿不修改底层对象以避免意外后果。
本质上,我正在寻找 javascriptapply
或call
.
编辑:我这样做的动机本质上是封装:我想对我没有编写、不控制、不需要深入理解的类中的对象执行此操作,并且可能对拥有自己的对象做出不良反应方法可能被通用实现取代。我意识到仅包含 Enumerable 在大多数情况下都可以工作,但是当它出错时,调试起来很麻烦,所以如果有一种简单的方法可以在不那么具有侵入性的情况下获得 mixin 的好处,我更愿意这样做。