Ruby-Module und Klassen gleichen Namen in der Struktur
Habe ich eine Ordner-Struktur wie die folgende in einem meiner Projekte:
- lib
- bar.rb
- bar
- other_bar.rb
- another_bar.rb
- next_bar.rb
- ...
bar.rb
require File.expand_path(File.dirname(__FILE__) + "/bar/other_bar.rb")
class Bar
puts "running BarBase"
end
bar/other_bar.rb
module Bar
class OtherBar
puts "running module Bar with class OtherBar"
end
end
Wenn ich starte jetzt ruby bar.rb
ich dieses:
ausführen von Modul-Leiste mit Klasse OtherBar
bar.rb:3:: Bar ist nicht eine Klasse (TypeError)
Ich würde gerne eine ähnliche Struktur wie eine rails-Modells vererbungsstruktur. Wie kann ich dieses Problem beheben? So weit ich weiß, ruby unterstützt dies nicht out of the box. Gibt es eine Abhilfe für so eine situation?
InformationsquelleAutor der Frage Mattherick | 2012-11-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bar
kann nicht sein, ein Modul und eine Klasse, Sie sind verschiedene Dinge.Ändern
bar.rb
zumodule Bar
oder ändernother_bar.rb
zuclass Bar
.Je nachdem, was es ist, es muss einheitlich sein. Sie können nicht ändern, eine um die andere. Die Frage ist, welche soll es sein? Wenn
Bar
ist ein container für andere Klassen und hat nur ein paar Globale singleton-Methoden? Dann ist es einmodule
. Aber wenn es instanziiert werden kann, dann ist es einclass
.Und ja, Sie können nest Klassen. Dies ist völlig akzeptabel:
Module und Klassen können Ineinander verschachtelt werden innen entweder andere in irgendeiner Weise sehen Sie fit.
Bearbeiten mit einige kommentierte Beispiele helfen dabei klar:
InformationsquelleAutor der Antwort Alex Wayne
Verwenden Sie einfach
class Bar
stattmodule Bar
. In Ruby-Klassen können wieder geöffnet werden und Hinzugefügt.InformationsquelleAutor der Antwort mpartel