J'essaie de créer un petit hack ruby pour faire quelque chose comme l'inverse du symbole # to_proc hack. Alors que le symbole # to_proc hack rend cela possible: est identique à p> Je veux rendre cela possible: p > [:foo, :bar, :bas].each(&[:puts])
3 Réponses :
Voici une autre façon de le faire sans utiliser la méthode () code> méthode :). Il utilise un bloc pour capturer la liaison, puis invoque la méthode correspondante sur le auto code> de la liaison. class Object
def apply &block
b = eval('self', block.binding)
lambda { |param| b.send block.call, param }
end
end
# use like this:
[1, 2, 3, 4].each &apply { :puts }
output: 1
2
3
4
Ooh, c'est friggin cool. Cette solution est plus proche de ce que j'avais initialement l'intention.
Vous recherchez la méthode appelée rendements p> méthode code> :)
C'est .. exactement ce que je cherchais! :) Merci.
Bien que Adrian ait la bonne idée avec l'utilisation de la méthode code> code>, vous pouvez simplifier cette étape:
module Enumerable
def pass_each(method_name)
each(&method(method_name.to_sym))
end
end
%w{the quick brown fox jumps over the lazy dog}.pass_each(:puts)
C'est une bonne idée de faire une nouvelle méthode énumérable, mais j'aimerais pouvoir utiliser ce truc avec toutes les différentes méthodes énumérables, telles que chacune, carte, rejet, etc. Merci!
Dans votre exemple PASS_ECH CODE> EXEMPLE N'EST PAS LA MÉTHODE METHODE () CODE> Être exécuté dans le mauvais contexte (contexte du récepteur) et n'a donc pas accès aux bonnes méthodes?
La méthode doit être déclarée dans le contexte principal ou ne sera pas très utile, oui. Sinon, c'est un désordre pour obtenir cette méthode appeler pour travailler sur le contexte actif.
@tadman, mais cela signifie le comportement de votre approche code> et la première approche que vous avez mentionnée (Adrian's One) est complètement différente.
Pourriez-vous choisir une réponse sélectionnée? : P Je viens de remarquer ceci q. Vous avez un certain intérêt et il serait donc bon que vous choisissiez la réponse qui réponde mieux à votre Q.
Bon point. Je voulais voir si quelqu'un aurait une réponse quant à la manière de le faire fonctionner à la liaison, comme dans ma question initiale. Mais je suppose que ce n'est pas possible comme j'essayais de le faire, car le hack TO_PROC est à l'intérieur d'un autre objet (tableau).
Je ne sais pas ce que vous entendez par "travailler la liaison", mais malletete la réponse que j'ai eue, qui fait certaines choses avec une contraction, mais ce n'est vraiment pas aussi propre et agréable que la méthode
() code> approche