2008-10-10 10 views
3

Je travaille avec dRuby et, fondamentalement, j'appelle une méthode distante qui me renvoie un objet.is_a? et dRuby objects

Dans le clientside Je possède ce code:

handle_error(response) if response.is_a?(Error) 

où la réponse est le DRbObject. (J'ai développé ce code avant d'utiliser dRuby et je retourne un objet Error en cas de problème). Le problème est que maintenant

response.is_a?(Error) 

revient avec « faux » parce que l'objet est en fait un DRbObject. Une idée sur la façon dont je peux vérifier la classe de mon objet d'application?

Merci! Roberto

Répondre

3

Bien que je ne sois pas sûr de la manière dont DRb gère les objets distants, je m'attends à ce qu'il modifie #kind_of? pour maintenir la hiérarchie des classes sur l'objet à distance, de sorte que vous pouvez faire:

response.kind_of?(Error) 

Si cela ne demande fonctionne pas, vous pouvez toujours si elle répond à une méthode spécifique et aller de là

response.respond_to?(some_method_on_your_errors) 
1

Impossible de contourner le problème en utilisant Duck Typing? Au lieu de vérifier si l'objet est une erreur, vérifiez si l'objet répond à un appel pour obtenir les informations d'erreur. Si c'est le cas, gérer l'erreur en fonction de ces informations, sinon gérer la réponse (sans erreur).

Questions connexes