C'est un module qui est une fonction de Ruby, mais je pense que c'est l'une des parties qui est difficile à comprendre pour ceux qui sont nouveaux sur Ruby.
Alors cette fois, je vais résumer les modules.
● Mix-in (inclure et étendre) ● Création d'un espace de noms ● Fournir des fonctions et des méthodes
Il existe d'autres fonctionnalités, mais j'en ai répertorié trois principales. Aujourd'hui, je voudrais jeter un coup d'œil à ces derniers.
Je ne sais pas ce que signifie être un mix-in, L'héritage multiple peut être effectué en incorporant le module dans la classe. Dans Ruby, un seul héritage de classe est possible, mais le module peut être un héritage multiple. De plus, contrairement à la classe, la même fonction peut être partagée même si elle n'a pas de relation is-a (une relation selon laquelle un objet est une instance d'une classe ou de ses descendants).
Addendum: L'explication de la relation is-a a été corrigée. Merci pour votre commentaire.
include
ruby.rb
module Hoge
def hello
puts 'Hello'
end
end
module Bar
def bye
puts 'Bye'
end
end
class Greet
#Inclure le module créé ci-dessus
include Hoge
include Bar
end
greet = Greet.new
greet.hello #=> "Hello"
greet.bye #=> "Bye"
En incluant comme ci-dessus, la classe peut utiliser les méthodes définies dans le module. L'ajout de fonctions en incluant des modules dans une classe de cette manière est appelé mix-in.
extend Vous pouvez utiliser extend pour transformer une méthode d'un module en méthode de classe.
ruby.rb
module Hoge
def hello
puts 'Hello'
end
end
class Greet
#Étendez le module créé ci-dessus
extend Hoge
end
#Vous pouvez appeler hello comme méthode de classe
Greet.hello #=> "Hello"
Vous pouvez utiliser les méthodes définies dans le module avec include ou extend dans la classe comme ceci. C'est un mix-in qui est l'une des manières d'utiliser le module.
Si vous écrivez une classe dans le nom du module, cela signifie une classe qui appartient au module. Vous pouvez éviter les conflits de noms.
module Bar
class Baz
def self.foo
puts 'foo'
end
end
end
#J'ai appelé la méthode foo de la classe Baz qui appartient au module appelé Bar.
Bar::Baz.foo #=> "foo"
Ce que j'ai ressenti après avoir travaillé comme ingénieur Il existe de nombreuses possibilités d'utiliser les espaces de noms. Parce que plus le projet est gros, plus il y a de risques de conflits de noms. Nous définissons souvent les espaces de noms de cette manière pour éviter les conflits.
Les constantes définies dans le module peuvent être appelées via le nom du module.
ruby.rb
module Hoge
Year = "2020"
end
Hoge::Year #=> "2020"
Les méthodes d'instance peuvent être appelées à l'aide de la méthode module_function et en transformant la méthode en fonction de module.
ruby.rb
module Hoge
def hello
puts 'Hello'
end
module_function :hello
end
Hoge.hello #=> "Hello"
Ceci conclut le résumé des modules. C'était le 10ème jour de la sérialisation d'un ingénieur qui deviendra un ingénieur à part entière 100 jours plus tard aujourd'hui.
** 90 jours pour devenir un ingénieur à part entière **
Recommended Posts