2012-03-29 81 views
2

我正在使用Ruby和WIN32OLE(具體來說就是Excel)。Ruby如何知道哪些OLE對象是可枚舉的?

我發現所有那些可枚舉的對象,比如Range.Columns,都可以在Ruby中自動枚舉,並且可以使用obj.each方法進行迭代。

我想知道它是如何工作的?我明白,如果你想讓某些東西可以枚舉,你必須include "Enumerable"。但顯然他們不能將該行放入OLE對象中。它是直接將obj.each方法映射到for each循環嗎?

+0

檢查源代碼。它們可能繼承自包含Enumerable的基礎對象。 – theglauber 2012-03-29 22:09:12

+0

您可能想嘗試使用'obj.class.ancestors'來查看對象是什麼類,以及它擁有的是什麼類型的祖先。 – 2012-03-29 22:14:09

+0

'Columns'集合的祖先是:[WIN32OLE,Object,Kernel,BasicObject]。 'Excel.Application'也是一樣的。但'Columns'是可枚舉的,而'Excel.Application'不能。 – texasbruce 2012-03-30 12:45:35

回答

0

an interesting set of posts here可能會回答你的問題,具體包括:

(...),每個被稱爲 動態任何其他OLE方法;在調用 之前沒有確定該對象是否實際實現了IEnum。

和:

可枚舉#find方法擦出Excel範圍 對象的 '查找' 方法。這是WIN32OLE不包括 Enumerable的唯一原因。

WIN32OLE類有 '每' 的方法(WIN32OLE#每個定義)(...)

希望這有助於!

+0

如何調用WIN32OLE對象上的'.to_enum'來訪問所有'Enumerable'好東西,而不會冒着碰撞風險? – tovodeverett 2014-03-03 20:54:11