2009-02-27 9 views
4

Ich benutze Ruby 1.8. Verwenden des WIN32OLE-Moduls -Ruby win32ole - wie man den OLE-Klassentyp bestimmt, ob die OLE-Klasse eine Methode unterstützt

1) Wie kann ich den Klassennamen einer OLE-Objektinstanz ermitteln? 2) Wie kann ich feststellen, ob eine Objektinstanz eine bestimmte Methode unterstützt?

In einem Outlook-Automatisierungsskript versuche ich, die Elemente im Ordner "Gelöschte Objekte" zu löschen, die älter als 21 Tage sind. Für Postsendungen möchte ich die ReceivedTime-Eigenschaft verwenden, aber um dies zu tun, muss ich überprüfen, ob das Element tatsächlich eine MailItem-Instanz ist.

Für das zweite, das Beste, was ich in der Lage gewesen mit zu kommen (sehr langsam):

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

Antwort

7

Mit besonderem Bezug auf WIN32OLE objec ts ...

Wie kann ich den Klassennamen einer OLE-Objektinstanz ermitteln?

object.ole_obj_help.name 

Wie kann ich feststellen, ob eine Objektinstanz eine bestimmte Methode unterstützt?

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

Ich denke object.ole_methods.any? {| x | x.to_s == "MethodName"} wäre etwas prägnanter. Oder #detect, das wäre auch gut. –

+0

@MikeWoodhouse: Der Code kam von [diesem Link] (http://rubyonwindows.blogspot.com/2009/02/win32ole-objects-class-names-and.html). Ich würde persönlich 'ole_methods.collect (&: to_s)' (dh kein Knall und benutze Symbol # to_proc, außer du bist auf Ruby 1.8.6). –

-3
  1. obj.class

  2. :

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

1) WIN32OLE - keine Verwendung 2) funktioniert nicht mit ole_methods –

Verwandte Themen