我正在使用 Ruby 和 WIN32OLE(特别是 Excel)。
我发现所有这些可枚举对象,例如 Range.Columns,在 Ruby 中都是可自动枚举的,并且可以使用 obj.each 方法进行迭代。
我想知道它是如何工作的?我知道,如果你想让某些东西可枚举,你必须include "Enumerable"
. 但显然他们不能将该行放在 OLE 对象中。它只是直接映射obj.each
方法来for each
循环吗?
我正在使用 Ruby 和 WIN32OLE(特别是 Excel)。
我发现所有这些可枚举对象,例如 Range.Columns,在 Ruby 中都是可自动枚举的,并且可以使用 obj.each 方法进行迭代。
我想知道它是如何工作的?我知道,如果你想让某些东西可枚举,你必须include "Enumerable"
. 但显然他们不能将该行放在 OLE 对象中。它只是直接映射obj.each
方法来for each
循环吗?
这里有一组有趣的帖子可能会回答您的问题,特别是:
(...) 每个都像任何其他 OLE 方法一样被动态调用;在调用之前无法确定对象是否实际实现了 IEnum。
和:
Enumerable#find 方法与 Excel Range 对象的“find”方法冲突。这是 WIN32OLE 不包含 Enumerable 的(唯一)原因。
WIN32OLE 类具有“每个”方法(定义了 WIN32OLE#each)(...)
希望这可以帮助!