2009-02-27 29 views
4

yöntemini destekleyip desteklemediğini Ruby 1.8 kullanıyorum. WIN32OLE modülünü kullanma -Ruby win32ole - OLE sınıfının nasıl belirleneceği, OLE sınıfının

1) Bir OLE nesnesi örneğinin sınıf adını nasıl belirlerim? 2) Bir nesne örneğinin belirli bir yöntemi destekleyip desteklemediğini nasıl anlarım?

Bir Outlook otomasyon komut dosyasında, 21 günlükten büyük olan 'Silinmiş Öğeler' klasöründeki öğeleri silmeye çalışıyorum. Posta öğeleri için ReceivedTime özelliğini kullanmak istiyorum, ancak bunu yapmak için öğenin gerçekten bir MailItem örneğinin olup olmadığını kontrol etmem gerekiyor. İkinci İçin

, ben ile gelip mümkün olmuştur en iyi (gerçekten yavaş) 'dir:

def MethodExists(obj, methodName) 
    obj.ole_methods.each{|method| 
    if (method.name == methodName) 
     return true 
    end 
    } 
    return false 
end 

cevap

7
WIN32OLE objec ile ilgili olarak

ts ...

OLE nesnesi örneğinin sınıf adını nasıl belirleyebilirim?

object.ole_obj_help.name 

nasıl bir nesne örneği belirli bir yöntem destekleyip desteklemediğini söyleyebilir?

object.ole_methods.collect!{ |x| x.to_s }.include?('MethodName') 
+1

ile çalışmıyor? {| x | x.to_s == "MethodName"} biraz daha özlü olurdu. Ya da #detect, bu da iyi olurdu. –

+0

@MikeWoodhouse: Bu kod [bu bağlantıdan] geldi (http://rubyonwindows.blogspot.com/2009/02/win32ole-objects-class-names-and.html). Şahsen ben ole_methods.collect (&: to_s) '(yani patlama yok ve Ruby 1.8.6'da değilseniz Symbol # to_proc) kullanın. –

-3
  1. obj.class

  2. :

    if obj.respond_to?(methodName) 
        #do your work 
    end 
    
+1

1) WIN32OLE - yaramaz 2) object.ole_methods.any düşünüyorum ole_methods –

İlgili konular