362 votes

Dois-je utiliser alias ou alias_method ?

J'ai trouvé un article de blog sur alias vs. alias_method . Comme le montre l'exemple donné dans cet article de blog, je veux simplement aliaser une méthode à une autre dans la même classe. Que dois-je utiliser ? Je vois toujours alias utilisé, mais quelqu'un m'a dit alias_method est meilleur.

Utilisation de l'alias

class User

  def full_name
    puts "Johnnie Walker"
  end

  alias name full_name
end

User.new.name #=>Johnnie Walker

Utilisation de l'alias_méthode

class User

  def full_name
    puts "Johnnie Walker"
  end

  alias_method :name, :full_name
end

User.new.name #=>Johnnie Walker

Lien vers l'article du blog ici

4 votes

Ce post ne répond-il pas à votre question ?

4 votes

@marcog : Je l'ai lu en entier, et je ne suis pas convaincu. Définir des alias à l'intérieur de méthodes, ce n'est pas quelque chose qu'on devrait faire souvent.

2 votes

Le lien @digitalextremist fonctionne.

20voto

Doktor OSwaldo Points 3315

Les contributeurs de la gemme rubocop proposent dans leurs Guide de style Ruby :

Préférer l'alias lors de l'aliasing de méthodes dans la portée lexicale de la classe, comme l'est l'élément résolution de self dans ce contexte est également lexicale, et elle communique clairement à l'utilisateur que l'indirection de votre alias ne sera pas ne sera pas modifiée à l'exécution ou par une sous-classe, à moins que cela ne soit explicite. explicite.

class Westerner
  def first_name
   @names.first
  end

 alias given_name first_name
end

Utilisez toujours alias_method lorsque vous aliassez des méthodes de modules, de classes ou d'applications. singleton au moment de l'exécution, car la portée lexicale de l'alias conduit à des résultats imprévisibilité dans ces cas

module Mononymous
  def self.included(other)
    other.class_eval { alias_method :full_name, :given_name }
  end
end

class Sting < Westerner
  include Mononymous
end

0voto

Ajay Points 1

méthode_alias nouvelle_méthode , ancienne_méthode

ancienne_méthode sera déclaré dans une classe ou un module qui est hérité maintenant de notre classe où nouvelle_méthode sera utilisé.

ceux-ci peuvent être variables ou de méthode à la fois.

Supposons que la classe_1 possède old_method, et que la classe_2 et la classe_3 héritent toutes deux de la classe_1.

Si l'initialisation de la classe_2 et de la classe_3 est effectuée dans la classe_1, les deux peuvent avoir des noms différents dans la classe_2 et la classe_3 et leur utilisation.

-19voto

user722915 Points 312

Bien que cela puisse être mineur, il y a deux choses que j'aime dans alias, plus que dans alias_method :

(1) l'alias est plus court

et

(2) Vous n'avez pas besoin de taper le ,

C'est peu, je sais, mais quand vous faites cela quelques centaines de fois au fil des années, vous avez simplement tendance à préférer l'alias quand c'est possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X