Je pense qu'il existe une meilleure façon d'accomplir ce que vous essayez de faire. Cela n'a pas beaucoup de sens d'écrire une méthode pour retourner un hachage d'arguments qui sont déjà dans la classe. Vous pouvez tout simplement faire les variables d'instance ou des méthodes accessibles à l'aide attr_accessor:
class Person
attr_accessor :first_name, :last_name, :zip
end
vous n'avez pas besoin la méthode some_selected_attributes(). Vous pouvez simplement accéder aux variables ou méthodes directement:
p = Person.new
p.first_name # => value of first_name
Si vous vouliez un hachage, vous pouvez simplement le créer:
p = Person.new
hash = {:first_name => p.first_name, :last_name => p.last_name, :zip => p.zip }
Je ne sais pas pourquoi vous voulez construire ce hachage non plus. Il semble que ce soit une façon plus "orientée objet" d'accomplir tout ce que vous essayez de faire (en passant l'objet entier comme argument). Au lieu de travailler avec un hachage de champs sélectionnés, je suggérerais de travailler avec des objets entiers.
Je voulais aussi mentionner injecter. Mais même si je savais ce que ça faisait, je trouverais toujours difficile à lire. Donc, je viens souvent avec 'h = {}; ...; retour h; 'juste pour la lisibilité – Deradon
Merci! Le premier pas [DRY] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself) assez. «injecter» va dans la bonne direction, mais est difficile à lire. D'autres idées? – iblue
Voir la dernière modification. –