Неинициализированная константа MyClass (NameError) в Ruby - PullRequest
8 голосов
/ 16 мая 2009

У меня есть модуль Shish (который действует как абстрактный класс) и класс посетителей Only_Onions.

Я хочу создать экземпляр Only_Onions в модуле Shish, чтобы все классы, расширяющие Shish, могли использовать объект для определения, если у них есть только__onions.

module Shish
    only_onions_class = Only_Onions.new
end

class Only_Onions
    def for_skewer
        return true
    end
end


class Skewer
    include Shish

    def only_onions
        return only_onions_class.for_skewer
    end

    def veg?
        return true
    end
end

Но я получаю сообщение об ошибке "Неинициализированная константа Shish :: Only_Onions (NameError). Что это значит?

Ответы [ 2 ]

7 голосов
/ 16 мая 2009

Порядок объявления вступает в силу. Шиш не знает о Only_Onions в вашем коде. Если вы измените его на это, то Only_Onions уже объявлен при определении модуля Shish:

class Only_Onions
    def for_skewer
        return true
    end
end

module Shish
    only_onions_class = Only_Onions.new
end

class Skewer
    include Shish

    def only_onions
        return only_onions_class.for_skewer
    end

    def veg?
        return true
    end
end
2 голосов
/ 16 мая 2009

1001 * попробовать *

::Only_Onions
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...