Qui Ruby memoize modèle ne ActiveSupport::Memoizable référence?
Donc dans les Rails 3.2, ActiveSupport::Memoizable a été désapprouvée.
Le message se lit comme suit:
DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and
will be removed in future releases,simply use Ruby memoization
pattern instead.
Il se réfère à "Ruby memoization modèle" (au singulier) comme si il y a un modèle que nous devrions tous connaître et de se référer à...
Je suppose qu'ils veulent dire quelque chose comme:
def my_method
@my_method ||= # ... go get the value
end
ou
def my_method
return @my_method if defined?(@my_method)
@my_method = # ... go get the value
end
Est-il autre chose que j'ai manqué?
- Si vous voulez "faux" ou "néant", il ne serait pas être enregistrés à l'aide de Ruby memoizable. Donc, si vous voulez mettre en place votre propre memoizable wrapper, ajouter un moyen de sauver les "faux" et "nil'.
Vous devez vous connecter pour publier un commentaire.
Voici le commettre (et discussion) où Memoizable était obsolète: https://github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c
L'auteur préconise l'
@foo ||= ...
approche et points à ce commit comme un exemple pour la migration: https://github.com/rails/rails/commit/f2c0fb32c0dce7f8da0ce446e2d2f0cba5fd44b3.Edit:
Notez que je n'ai pas forcément interpréter ce changement comme signifiant que toutes les instances de
memoize
peut ou doit être remplacé avec ce modèle. Je l'ai lu en ce sens que Memoizable n'est plus nécessaire/voulu dans les Rails du code lui-même. Comme les commentaires le soulignent, Memoizable est beaucoup plus que juste un wrapper autour de@foo ||= ...
. Si vous avez besoin de ces fonctionnalités, aller de l'avant et à l'utilisation Memoizable, vous aurez juste à obtenir à partir de quelque part d'autre que ActiveSupport (je suppose que quelqu'un va à la fourche d'un joyau de la version, si elles n'ont pas déjà).Une autre option est d'utiliser le Memoist gem:
C'est une extraction directe à partir de
ActiveSupport::Memoizable
et peut être utilisé comme un remplacement. Justerequire 'memoist'
et changementà
Simplement un ajout à la réponse sommet, à memoize une méthode de classe, utilisez la syntaxe suivante:
Sur la base des observations sur la validation référencé ci-dessus par avaynshtok, je vais avec cela:
... parce que je me dis que je vais savoir quand
Memoizable
est arraché de ActiveSupport de mon RSpec suite de mourir à droite de la grille de départ.