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
Ich denke object.ole_methods.any? {| x | x.to_s == "MethodName"} wäre etwas prägnanter. Oder #detect, das wäre auch gut. –
@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). –