2012-03-29 2 views
2

Ruby와 WIN32OLE (특히 Excel)과 함께 작업하고있었습니다.Ruby는 어떤 OLE 개체를 열거 할 수 있는지 어떻게 알 수 있습니까?

Range.Columns와 같은 모든 열거 가능한 객체가 자동으로 루비에서 열거 가능하며 obj.each 메소드를 사용하여 반복 될 수 있음을 발견했습니다.

어떻게 작동하는지 궁금합니다. 열거할만한 것을 만들고 싶다면 include "Enumerable"해야한다는 것을 이해합니다. 하지만 분명히 그들은 OLE 객체에 해당 라인을 넣을 수 없습니다. 그것은 단지 obj.each 메서드를 for each 루프에 직접 맵핑합니까?

+0

소스 코드를 확인하십시오. 그들은 아마도 Enumerable을 포함하는 기본 객체를 상속합니다. – theglauber

+0

'obj.class.ancestors'를 사용해 객체가 어떤 클래스인지 그리고 그 조상이 무엇인지 확인할 수 있습니다. –

+0

'Columns' 콜렉션의 조상은 [WIN32OLE, Object, Kernel, BasicObject]입니다. Excel.Application에서도 마찬가지입니다. 그러나 'Excel.Application'은 열 수 없지만'열 '은 열거 할 수 있습니다. – texasbruce

답변

0

특히, 귀하의 질문에 대답 할 수 an interesting set of posts here있다 :

(...) 각각 라고한다 동적으로 다른 OLE 방법으로; 개체가 실제로 IEnum을 구현하는지 여부는 호출 전에 결정되지 않습니다.

과 :

Enumerable에서 # 찾기 방법은 엑셀 범위 개체의 '찾기'방법을 충돌한다. 이것이 WIN32OLE에 열거 형이 포함되지 않은 유일한 이유입니다.

WIN32OLE 클래스는 '각'방식 (WIN32OLE # 각각 정의) (...)이 도움이

희망이있다!

+0

WIN32OLE 개체에서'.to_enum'을 호출하여 충돌을 위험에 빠뜨리지 않고'Enumerable' 모든 항목에 액세스 할 수 있습니까? – tovodeverett

관련 문제