2011-09-21 4 views
0

Il y a quelques aides que j'utilise dans mon projet, que je pensais juste que je pourrais peut-être traiter comme des procs, car ils font des tâches très spécifiques et peuvent être utilisés par des composants très différents.Comment utiliser Procs dans Ruby on Rails?

J'ai utilisé Procs dans de petits projets Ruby, principalement lors de l'apprentissage du langage, et j'ai pensé que ce serait une bonne occasion de les utiliser.

Ma question est, où devrais-je mettre la Procs dans la structure de dossiers Rails? Existe-t-il des lignes directrices ou des recommandations pour cela? Est-ce considéré comme une bonne pratique?

Répondre

3

Je suis un peu perplexe quant à l'avantage d'utiliser Procs plutôt que d'utiliser des méthodes simples. Donc, si vous pouviez donner quelques exemples, ce serait bien.

Quoiqu'il en soit: puisque Procs peut être stocké dans une variable, je voudrais déclarer un module dans le dossier lib, et définir les procs comme des variables, des constantes ou des méthodes retournant le proc. Quelque chose comme ça

module ProcContainer 

    def proc_1(factor) 
    Proc.new { |n| n*factor } 
    end 

    PROC_2 = Proc.new { |n| 2 * n } 

end 

qui serait utilisé comme

gen_proc = ProcContainer.proc_1(6) 
result = gen_proc(3) 

other_proc = ProcContainer.PROC_2(4) 

L'avantage de la méthode est évidente, je suppose, car il retournera un nouvel objet Proc à chaque fois qu'il est appelé, alors que la constante est seulement évalué une fois.

(bien sûr, vous devez changer la dénomination à quelque chose de plus approprié)

+0

Merci pour votre réponse, bien que je pensais que les rails auraient une place plus spécifique pour les blocs Procs/code, mais je suppose que j'ai tort. Le cas auquel je pensais est un filtre d'application que je veux utiliser pour appliquer au contenu avant de le dépasser. En ce moment je l'ai comme une aide et l'utilise dans les vues, mais pour une raison qui ne se sentait pas bien, alors je voulais en savoir plus sur Proc ... –

1

Ruby a une syntaxe étonnante pour les blocs, donc nous avons tendance à les préférer à la création explicite des procs. L'inconvénient des blocs est qu'ils doivent être exécutés immédiatement quand la méthode appelée leur cède (les procs n'ont pas cette limitation). C'est en place pour des raisons de performance, mais vous pouvez facilement empaqueter un bloc comme un proc, et le stocker ailleurs pour plus tard, ou le passer à une autre méthode. Donc, même si vous utilisez probablement tous les jours procs, vous ne le réalisez pas vraiment, parce que votre interface à eux est à travers la syntaxe de bloc.

+0

Je suis conscient des blocs et tout ce que je voulais dire est que je veux stocker procs de les transmettre à des méthodes pour des tâches indépendantes très spécifiques, mais Je ne sais pas dans quel fichier dois-je les mettre à l'intérieur de Rails, de sorte qu'ils sont accessibles par l'ensemble de l'application. –