46 votes

Est-ce que les méthodes to_s en Ruby sont mauvaises?

J'ai expérimenté et découvert que j'aime redéfinir les méthodes to_s de l'objet. Est-ce une mauvaise idée ou est-ce une bonne pratique?

61voto

Magnar Points 15142

Non, vous devriez vous sentir libre de remplacer to_s - il n'y a pas d'effets secondaires néfastes. Tant que votre nouveau to_s est plus informatif que la fonction intégrée (ce n’est pas vraiment un standard élevé), vous êtes au clair.

Et ils contribuent à améliorer la lisibilité de vos échecs de test - parfois de beaucoup - ce qui n’est jamais une mauvaise chose. Fonce!

10voto

DGM Points 14007

Je remplace to_s tout le temps dans mon projet de rails:

   def to_s
     prénom + "" + dernier nom
   fin

il est donc plus facile d'afficher des objets dans la vue:

<% = @person%>

7voto

sawa Points 62592

Cela peut être délicat à faire, car parfois, la méthode inspect appelle seulement to_s et si cela est modifié, vous aurez peut-être du mal à déboguer. Si vous pensez que modifier to_s peut vous semer la confusion lorsque vous devez visualiser les résultats à l'aide de méthodes reposant sur inspect , telles que p , vous devez peut-être redéfinir inspect pour cette classe en même temps. Tant que vous êtes sûr de ce que vous faites, vous voudrez peut-être le faire.

1voto

kikito Points 23229

Ce n'est pas "mauvais" en soi, mais il n'est pas "bon", soit. Cela dépend vraiment du contexte.

Si vous faites cela pour un one-shot (par exemple à l'intérieur de votre application rails de l' /lib/ le dossier, pour une application en particulier), il est probablement correct (assurez-vous de donner au fichier un nom descriptif, tel que object_to_s_patch.rb ou similaire, et que tous les correctifs sont sur la même place)

Si vous faites un bijou ou d'une lib, d'autre part, je ne serais pas le remplacer. Au lieu de cela, je voudrais ajouter une autre méthode - Object.to_special_s ou quelque chose. Mais je voudrais aussi essayer de ne pas toucher l'Objet, si possible, - Si vous pouvez vous en tirer avec l'aide de YourModule::to_s(objet) ce serait sans doute encore mieux.

Le raisonnement derrière cela est que d'autres personnes pourraient être l'Objet.to_s pour d'autres trucs, peut-être dans d'autres libs. Monkeypatching il va produire des affrontements avec ceux d'autres libs.

La seule exception lorsque l'on fait un bijou que je peux penser, c'est quand le point principal (ou l'un des principaux points) de la bibliothèque est en fait de la substitution de la méthode; en d'autres termes, vous êtes littéralement faire une lib qui l'emporte sur l'Objet.to_s, et rien d'autre. Je l'avais mis quelques gros avertissement sur la documentation sur ce cas. De cette façon, les gens à l'aide il ne sera pas surpris.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X