2013-03-19 23 views
6

Pracuję z pewnym starszym kodem RoR, który ma cztery powiązane klasy, z których każda jest zdefiniowana we własnym pliku. Wszystkie te klasy są klasami analizatora składni i są dostępne w aplikacjach/modelach/analizatorach składni. Każda nazwa pliku kończy się _parser.rb.Ruby - :: w nazwie klasy

Oto przykład linia def klasy z pliku adf_parser.rb:

class Parsers::AdfParser 

gubię, co Parsery :: częścią tego robi.

  • Nie ma wyraźnego modułu o nazwie Parsery zdefiniowanego w dowolnym miejscu, które można znaleźć.
  • Nie widzę dokumentacji o niejawnym tworzeniu modułów przez dodanie specyfikacji modułów do nazw klas.
  • Jedyną zewnętrzną zależnością jest "wymaganie" csv "".
  • Istnieją pewne instrukcje wewnątrz klasy def, ale nie sądzę, że mają coś, co wyjaśniałoby nazwę klasy.
  • Utworzono nowy projekt testowy RoR i umieszczam pliki pośredniczące tych plików w katalogu równoległym, a nie będą one uruchamiane z wiersza poleceń z powodu błędu nazwy .
  • Nie widzę żadnych przykładów online klas wymienionych w ten sposób.

Jestem pewien, że to nie jest operacja rakieta, ale ja straciłem większość mojego rano próbuje dowiedzieć się tego, a ja kocham to, czy ktoś może mi powiedzieć, co się dzieje z nim.

Aktualizacja: Wygląda na to, że jest to tylko odrobina magii Railsów, oparta na nazwie podkatalogu. Myślę, że powodem, dla którego dostałem błąd w mojej aplikacji testowej jest to, że po prostu uruchomiłem pliki przez interpreter ruby, zamiast wywoływać je w jakiś sposób za pomocą Railsów.

+0

To tylko przestrzeń nazw. Co próbujesz wymyślić? –

+0

Jaki błąd pojawia się w linii poleceń? Podobnie jak @DaveNewton powiedział, że to tylko przestrzeń nazw. Możesz zrobić to My :: Fancy :: Parsers :: AdfParser, jeśli chcesz, ale w ten sposób będziesz musiał uzyskać do niego dostęp w ten sposób za każdym razem. – awbergs

+2

@Daj tak, ale przestrzeń nazw musi być gdzieś zdefiniowana. Myślę, że OP mówi, że nie mogą znaleźć definicji modułu 'Parsers', więc zastanawia się, czy coś specjalnego się dzieje. – mikej

Odpowiedz

6

class Parsers::AdfParser jest w praktyce do równowartości:

module Parsers 
    class AdfParser 

do tego, aby działać poprawnie, a plik być ładowane automatycznie jego lokalizacja powinna być parser/adf_parser.rb, zarówno pod app/modeli lub lib. Zasadniczo ścieżka pliku musi naśladować hierarchię klas.

+0

Tak właśnie myślałem, ale kiedy stworzyłem nowy projekt typu dummy i próbowałem wprowadzić podobne defekty klas w folderze parserów, dostałem błąd nazwy. Czy pliki klas muszą być tworzone przez szyny, aby to działało? – whognu

+0

Próbowałem tego sam w 'lib /' i to nie działało, stąd moja błędna odpowiedź (którą od tej pory głosowałem, aby usunąć).Natychmiast po wypróbowaniu niektórych nazw katalogów w "app/models /" wszystko działało. Schludny. – BaronVonBraun

+1

Klasy nie trzeba tworzyć za pomocą generatorów szyn. Jednak muszą one znajdować się pod ścieżką, którą Railsy ładują automatycznie, co jest ustawione w config/application.rb. Zazwyczaj będziesz miał 'config.autoload_paths + = Dir [" # {config.root}/app/models/**/"]' i to samo dla lib. Następnie możesz napisać takie rzeczy jak 'Parser.adfParser.new' – boulder

3

Znajduje się w podfolderze z modułami; Obszary nazw Railsów według konwencji.

+0

@ user1476065 Jako Dave Said, ponieważ wszystkie pliki ur znajdują się wewnątrz podkatalogu" parserów ", a przestrzeń nazw Railsów to – Viren

Powiązane problemy