2013-07-16 11 views
5

Mam klasę ruby, Feedbin, która była wcześniej nazwą modułu. Kiedy próbuję wywołać dowolne metody w klasie, wywoływany jest TypeError: `': Feedbin nie jest klasą (TypeError)Ruby/rspec nie rozpoznaje klasy Ruby o tej samej nazwie co poprzedni moduł

Kiedy zmieniam nazwę klasy, ale dołączam na przykład s, rzeczy wydają się być działają zgodnie z oczekiwaniami.

Ten sam program miał również moduł o nazwie Feedbin, ale moduł już nie istnieje.

Stary:

module Feedbin 
    class Api 
    end 
end 

Nowość:

class Feedbin 
end 

Jak mogę pozbyć się "Feedbin nie jest klasa" Błąd rodzaju? Co to powoduje?

+0

Jakie jest twoje pytanie? – sawa

+0

@sawa Jak mogę pozbyć się błędu typu "Feedbin is not a class"? Co to powoduje? –

+0

Napisz to w tekście. – sawa

Odpowiedz

7

Modułu nie będącego klasą nie można zmienić w klasę. Po zdefiniowaniu modułu (innego niż klasa) nie można go zmienić w klasę. To może mieć:

class Feedbin 
... 

gdzieś przed którym trzeba

module Feedbin 
... 

zmiana, która class w module, lub użyć innej nazwy zamiast Feedbin dla jednego z nich.

Czy pojawia się komunikat o błędzie niektórych metod? Niektóre metody można definiować tylko na klasach. Na przykład, jeśli wywołasz Feedbin.new, lub coś, co wywołuje initialize na Feedbin i zmienić Feedbin w moduł inny niż klasa, to spowoduje błąd. W takim przypadku użyj innej nazwy dla modułu nie-klasy.

+0

To jest dokładnie to, co zrobiłem. Jaka jest tego przyczyna? Czy są na to jakieś sposoby? Co się stanie, jeśli usuniemy i ponownie utworzę plik? –

+0

Czy na pewno nie masz żadnego wystąpienia, w którym jest napisane 'class Feedbin'? Jeśli włączysz inne pliki, może tam być napisane. – sawa

+0

Ja. Nie mogę też zmienić klasy z powrotem na moduł, ponieważ potrzebuję tworzyć z niego obiekty. –

0

Wystąpił ten sam problem podczas uruchamiania za pośrednictwem serwera WWW.

Rozwiązaniem było ponowne uruchomienie serwera.

Powiązane problemy