J'essaie de comprendre comment faire en sorte qu'une sous-classe de OpenStruct (ou n'importe quelle classe d'ailleurs), ou hachage, déclenche une exception personnalisée si J'essaie d'accéder à un attribut qui n'a pas été défini. Je ne pouvais pas obtenir define_method
et method_missing
pour le faire, donc je ne sais pas comment cela devrait être fait dans Ruby.Soulevez l'exception lors de l'accès aux attributs qui n'existent pas dans OpenStruct
Voici un exemple:
class Request < OpenStruct...
request = Request.new
begin
request.non_existent_attr
rescue CustomError...
je pouvais l'imaginer devrait être quelque chose comme ceci:
class Hash
# if trying to access key:
# 1) key exists, return key
# 2) key doesn't exist, raise exception
end
Edit: Les attributs qui existent ne devrait pas soulever une exception. La fonctionnalité que je recherche est telle que je peux simplement accéder aux attributs librement et si cela n'arrive pas, mon exception personnalisée sera levée.
Vous pouvez utiliser la méthode 'fetch' au lieu d'écraser' [] 'ici. http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch –