12
votes

Pouvez-vous remplacer une méthode aliasée dans Ruby?

dans Ruby, lorsqu'un procédé est aliasé, l'alias pointe vers le corps de la méthode d'origine. Donc, même si vous redéfinissez la méthode d'origine, l'alias continuera à utiliser la définition initiale.

class Foo
  def bar
    "bar"
  end  
  alias :saloon :bar
end

class Foo
  def bar
    "BAR"
  end
end

puts Foo.new.saloon


0 commentaires

4 Réponses :


8
votes

Il suffit de rétablir l'alias: xxx


0 commentaires

4
votes
class Foo
  def bar
    "bar"
  end
  def saloon
    bar
  end
end
This is not an alias at all, but it works as you want.

0 commentaires

2
votes

oui et non. Les solutions Coreyward ou Sony Santos fonctionnent bien. Ce que vous devez savoir, c'est pourquoi votre codé n'a pas fonctionné comme si vous avez bien fonctionné.

alias fait un nouveau nom pour la fonction tel qu'il apparaît lorsque la méthode est invoquée. C'est pas un pointeur, mais une nouvelle façon de faire référence à quelque chose. Cela nous permet de faire quelque chose comme ceci: xxx

L'ancienne bar existe toujours, il est juste un peu plus difficile à accéder maintenant.


0 commentaires

2
votes

Voici une autre réponse, mais vous devez effectuer des étapes supplémentaires: collectez les alias avant de remplacer, et des réalités après: xxx

BTW, si quelqu'un peut éteindre l'une de ces étapes, Puis-je le savoir! :)


1 commentaires

C'est un moyen intelligent de déterminer quelles méthodes sont aliasées. Je pense que ça ferait le tour ...