2009-02-27 8 views
4

J'utilise Ruby 1.8. Utilisation du module WIN32OLE -Ruby win32ole - comment déterminer le type de classe OLE, si la classe OLE prend en charge une méthode

1) Comment déterminer le nom de classe d'une instance d'objet OLE? 2) Comment puis-je savoir si une instance d'objet prend en charge une méthode particulière?

Dans un script d'automatisation Outlook, j'essaie de supprimer les éléments du dossier "Éléments supprimés" qui datent de plus de 21 jours. Pour les éléments de courrier, je souhaite utiliser la propriété ReceivedTime, mais pour ce faire, je dois vérifier si l'élément est réellement une instance MailItem.

Pour la deuxième, le meilleur que j'ai pu trouver est (très lent):

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

Répondre

7

En ce qui concerne spécifiquement WIN32OLE objec ts ...

Comment puis-je déterminer le nom de classe d'une instance d'objet OLE?

object.ole_obj_help.name 

Comment puis-je savoir si une instance d'objet prend en charge une méthode particulière?

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

Je pense object.ole_methods.any? {| x | x.to_s == "MethodName"} serait un peu plus concis. Ou #detect, ce serait bien aussi. –

+0

@MikeWoodhouse: Le code provient de [ce lien] (http://rubyonwindows.blogspot.com/2009/02/win32ole-objects-class-names-and.html). Personnellement, je ferais 'ole_methods.collect (&: to_s)' (c'est-à-dire pas de bang, et utilisez Symbol # to_proc sauf si vous êtes sur Ruby 1.8.6). –

-3
  1. obj.class

  2. :

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

1) WIN32OLE - pas d'utilisation 2) ne fonctionne pas avec ole_methods –

Questions connexes