HELO,
Je suis assez nouveau à Ruby (en utilisant 1.8.6) et devez savoir si la fonctionnalité suivante est disponible automatiquement et, sinon, ce qui serait la meilleure méthode pour la mettre en œuvre. P> J'ai une voiture de classe.
Et avoir deux objets: p> est-ce que je pouvais faire un comparateur et trouver quelles propriétés diffèrent dans l'un des objets par rapport à l'autre? P> Par exemple, P> {:color => 'Blue', :sun_roof => 'false'}
4 Réponses :
Je ne sais pas si la différence de propriétés est directement possible. Mais le travail autour serait d'essayer le .eql? Opérateur sur les deux objets S'il y a une différence, vous pouvez utiliser la méthode de la classe d'objet TO_ARRAY comme p> comparant maintenant 2 tableaux car la différence serait facile. p> non testé mais p> ou quelque chose comme ça devrait vous donner la différence de propriétés. P> Htth p> p>
Classe # to_a ne fait pas ce que vous voulez du tout. Il renvoie fondamentalement un tableau contenant le récepteur (i.e. string.a_a == [string]).
a besoin de quelque peau de peau, mais voici l'idée de base:
Wow! C'est génial! Je vais essayer! Merci :)
Que diriez-vous de
class Object def instance_variables_compare(o) Hash[*self.instance_variables.map {|v| self.instance_variable_get(v)==o.instance_variable_get(v) ? [] : [v,o.instance_variable_get(v)]}.flatten] end end >> car_a.instance_variables_compare(car_b) => {"@color"=>"Blue", "@sun_roof"=>false}
J'ai eu le même problème et j'étais en train de regarder certaines de vos solutions, mais j'ai pensé que Ruby devait avoir un moyen de résoudre ce problème. J'ai découvert Activemodel :: sale. Fonctionne comme un charme. P>
http://api.rubyonRails.org/classes/ ActiveModel / Dirty.html # Method i-change P>
C'est une chose très différente que ce que l'OP demande cependant.
Je suis d'accord avec Dave Newton. Aussi ActiveModel est un calibre assez lourd pour une réflexion aussi simple ...