Namensraum: Module sind Namensräume ...die es in Java nicht gibt ;)
Ich bin auch von Java und Python zu Ruby gewechselt, ich erinnere mich, dass ich genau die gleiche Frage hatte...
Die einfachste Antwort ist, dass Modul ein Namespace ist, den es in Java nicht gibt. In Java ist das dem Namespace am nächsten kommende Mindset ein Paket .
Ein Modul in Ruby ist also wie ein Modul in Java:
Klasse? No
Schnittstelle? No
abstrakte Klasse? No
Paket? Ja (vielleicht)
statische Methoden innerhalb von Klassen in Java: dasselbe wie Methoden innerhalb von Modulen in Ruby
In Java ist die kleinste Einheit eine Klasse, man kann keine Funktion außerhalb einer Klasse haben. In Ruby ist dies jedoch möglich (wie in Python).
Was also gehört zu einem Modul?
Klassen, Methoden, Konstanten. Das Modul schützt sie unter diesem Namensraum.
Keine Instanz: Module können nicht zur Erstellung von Instanzen verwendet werden
Gemischte Einsätze: Manchmal sind Vererbungsmodelle nicht für Klassen geeignet, aber im Hinblick auf die Funktionalität wollen Sie eine Reihe von Klassen/Methoden/Konstanten zusammenfassen.
Regeln für Module in Ruby:
- Modulnamen werden in Großbuchstaben geschrieben
- Konstanten innerhalb von Modulen werden in ALL CAPS geschrieben (diese Regel gilt für alle Ruby-Konstanten, nicht speziell für Module)
- Zugriffsmethoden: use . operator
- Zugriff auf Konstanten: use :: symbol
einfaches Beispiel für ein Modul:
module MySampleModule
CONST1 = "some constant"
def self.method_one(arg1)
arg1 + 2
end
end
wie man Methoden innerhalb eines Moduls verwendet:
puts MySampleModule.method_one(1) # prints: 3
wie man Konstanten eines Moduls verwendet:
puts MySampleModule::CONST1 # prints: some constant
Einige andere Konventionen über Module:
Ein Modul in einer Datei verwenden (wie Ruby-Klassen, eine Klasse pro Ruby-Datei)
31 Stimmen
Dieses Diagramm kann helfen .