2009-06-26 14 views
32

Przez chwilę włączałem całą klasę do modułu Ruby. Najwyraźniej nie jest to coś, co powinienem zrobić. Wydaje się, że punktem modułu jest przechowywanie funkcji, które następnie można włączyć jako metody do nowej klasy.W tym klasa Ruby z oddzielnego pliku

Nie chcę tego. Mam klasę, którą chcę zachować w oddzielnym pliku, do którego mogę uzyskać dostęp z innych plików. Jak mogę to zrobić?

Dzięki.

+0

Ten wpis wyjaśnia wyrażenie require_relative w przypadku problemów z powyższym przykładem, gdy Ruby> = 1.9.2 [Ruby require_relative example] (http://stackoverflow.com/questions/3672586/what-is -require-relative-in-ruby) – Dirk

Odpowiedz

55

Moduły mają podwójny cel jako uchwyt dla funkcji i jako przestrzeń nazw. Prowadzenie zajęć w modułach jest całkowicie dopuszczalne. Aby umieścić klasę w oddzielnym pliku, po prostu zdefiniuj klasę jak zwykle, a następnie w pliku, w którym chcesz użyć klasy, po prostu umieść u góry require 'name_of_file_with_class'. Na przykład, jeśli zdefiniowałem klasę Foo w foo.rb, w bar.rb, będę miał linię require 'foo'.

Jeśli używasz szyny, to to się często zdarza automagicznie

Edit: wyjaśnienie układ plików

#file: foo.rb 
class Foo 
    def initialize 
    puts "foo" 
    end 
end 

...

#file: bar.rb 
require 'foo' 

Foo.new 

Jeśli jesteś w Rails, umieścić je klasy w lib/ i użyj konwencji nazewnictwa dla plików z małymi, podkreślonymi wersjami nazwy klasy, np. Foo ->foo.rb, FooBar ->foo_bar.rb itp

Jako ruby ​​wersji 1.9 można użyć require_relative, wymagają stosunkowo plików do pliku, który edytujesz.

+0

dzięki, bardzo pomocne. czy mógłbyś wyjaśnić to ostatnie zdanie? wygląda na to, że możesz mieć literówkę (?). Jeśli klasa foo jest zapisana w pliku bar.rb, wymagam "foo" w pliku bazcontroller.rb? Następnie foo.new można użyć w pliku bazcontroller.rb? – user94154

+9

Może byłoby fajnie dodać trochę informacji o "require_relative" dla Ruby 1.9, ponieważ kod nie działa dla tej wersji. – boutta

+2

@boutta Dziękujemy za wyjaśnienie 1.9, to naprawiło mój problem. – DorkRawk

Powiązane problemy