2011-02-08 24 views
5

Pozwala rozważyć Mam klasy wewnątrz naprawdę długą drogę module:Jak nie pisać pełnej ścieżki modułu w ruby?

sux = Really::Long::Module::Path::Sucks.new 

Could I jakoś „import” ten moduł w taki sposób, że może po prostu użyć klasy bez martwienia się pisząc tę ​​drogę za każdym razem, kiedy go używać ?

EDYCJA: Wiem, że bycie w tym samym module ułatwia pracę. Ale nie mogę być w tym samym module w tym przypadku.

+0

-1 za wulgaryzmy. –

+0

Co masz na myśli? Moje wulgaryzmy są tu napisane, wasza świętość nie jest, proszę, bądźcie klarowne, aby ludzie mogli się z tego uczyć. –

+0

Jeśli nie wiesz, co to słowo znaczy, spójrz tutaj: [wulgaryzmy] (http://en.wiktionary.org/wiki/profanity) –

Odpowiedz

4

Moduły to obiekt w kolorze ruby, więc możesz po prostu odwołać się do modułu, który jest krótszy.

Sux = Really::Long::Module::Path::Sucks 
Sux.new 
+0

Ups, nie przeczytałem dokładnie tego pytania. Zdecydowanie idź trasą 'include'. Nie mogę usunąć tego pytania, ponieważ w niektórych przypadkach jest to prawidłowe podejście (chyba, że ​​ktoś wyrazi sprzeciw). – cam

+0

brzmi to właściwie bardziej odpowiedni sposób na użycie tylko typu z innego modułu. Włączenie modułu może być trochę droższe, więc zmieniłem zdanie, to jest teraz moja wybrana odpowiedź. –

+0

Po prostu zmieniłbym ten drugi wiersz, ponieważ Sux jest teraz aliasem klasy Sucks, a nie jego instancją. Sux.new zrobiłby to. –

3

W swojej klasie:

include Really::Long::Module::Path 

Zasadniczo miesza wszystkie stałych tego modułu/metod pod tym klasy, więc można następnie użyć klasy Sucks bezpośrednio:

sux = Sucks.new 
2
module A; module B; module C; module D 
    class E; end 
end; end; end; end 

class Sanity 
    include A::B::C::D 
    puts E.new.object_id 
end 
Powiązane problemy