Es ist ein Modul, das eine Funktion von Ruby ist, aber ich denke, dass es einer der Teile ist, die für diejenigen, die Ruby noch nicht kennen, schwer zu verstehen sind.
Also werde ich diesmal die Module zusammenfassen.
● Einmischen (einschließen und erweitern) ● Erstellen eines Namespace ● Funktionen und Methoden bereitstellen
Es gibt andere Funktionen, aber ich habe drei Hauptfunktionen aufgelistet. Heute möchte ich mir diese ansehen.
Ich weiß nicht, was es heißt, ein Mix-In zu sein. Eine Mehrfachvererbung kann durchgeführt werden, indem das Modul in die Klasse aufgenommen wird. In Ruby ist nur eine einzelne Vererbung der Klasse möglich, das Modul kann jedoch eine Mehrfachvererbung sein. Im Gegensatz zur Klasse kann dieselbe Funktion auch dann gemeinsam genutzt werden, wenn sie nicht mit is-a zusammenhängt (eine Beziehung, in der ein bestimmtes Objekt "eine Instanz einer bestimmten Klasse oder ihrer untergeordneten Klasse" ist).
Nachtrag: Die Erklärung der is-a-Beziehung wurde korrigiert. Danke für deinen Kommentar.
include
ruby.rb
module Hoge
def hello
puts 'Hello'
end
end
module Bar
def bye
puts 'Bye'
end
end
class Greet
#Fügen Sie das oben erstellte Modul hinzu
include Hoge
include Bar
end
greet = Greet.new
greet.hello #=> "Hello"
greet.bye #=> "Bye"
Durch Einfügen wie oben kann die Klasse die im Modul definierten Methoden verwenden. Das Hinzufügen von Funktionen durch Einfügen von Modulen in eine Klasse auf diese Weise wird als Mix-In bezeichnet.
extend Mit expand können Sie eine Methode in einem Modul in eine Klassenmethode umwandeln.
ruby.rb
module Hoge
def hello
puts 'Hello'
end
end
class Greet
#Erweitern Sie das oben erstellte Modul
extend Hoge
end
#Sie können Hallo als Klassenmethode aufrufen
Greet.hello #=> "Hello"
Sie können die im Modul definierten Methoden verwenden, um die Klasse wie folgt einzuschließen oder zu erweitern. Es ist ein Mix-In, das eine der Möglichkeiten ist, das Modul zu verwenden.
Wenn Sie eine Klasse in den Modulnamen schreiben, bedeutet dies eine Klasse, die zum Modul gehört. Sie können Namenskonflikte verhindern.
module Bar
class Baz
def self.foo
puts 'foo'
end
end
end
#Ich habe die foo-Methode aus der Baz-Klasse aufgerufen, die zum Modul Bar gehört.
Bar::Baz.foo #=> "foo"
Was ich fühlte, nachdem ich als Ingenieur gearbeitet hatte Es gibt viele Möglichkeiten, Namespaces zu verwenden. Denn je größer das Projekt, desto größer ist das Risiko von Namenskonflikten. Wir setzen häufig Namespaces auf diese Weise, um Konflikte zu vermeiden.
Die im Modul definierten Konstanten können über den Modulnamen aufgerufen werden.
ruby.rb
module Hoge
Year = "2020"
end
Hoge::Year #=> "2020"
Instanzmethoden können aufgerufen werden, indem die Methode module_function verwendet und die Methode in eine Modulfunktion umgewandelt wird.
ruby.rb
module Hoge
def hello
puts 'Hello'
end
module_function :hello
end
Hoge.hello #=> "Hello"
Damit ist die Zusammenfassung der Module abgeschlossen. Heute war der 10. Tag der Serialisierung eines Ingenieurs, der 100 Tage später ein vollwertiger Ingenieur wird.
** 90 Tage, um ein vollwertiger Ingenieur zu werden **
Recommended Posts