назначение константы в модуле ruby - PullRequest
0 голосов
/ 23 января 2019

У меня есть модуль:

module Foo
  module Bar
    TEST = "ok"

    def self.is_ok; true end
  end
end

Foo::Bar::TEST # => "ok"
Foo::Bar.is_ok # => true

Я бы хотел, чтобы внутри модуля была определена еще одна константа, только один раз.

Я пытался так:

module Foo
  module Bar
    TEST = is_ok

    def self.is_ok; true end
  end
end

Я тогда получаю сообщение об ошибке undefined local variable or method 'is_ok' for Foo::Bar:Module. Это означает, что is_ok еще не определено.

Определены ли константы в другой момент времени, кроме методов класса модуля?

Кроме того, у меня есть еще один пример:

module Foo
  module Bar
    TEST = "ok"

    def self.is_ok; true end
  end

  module YYY
    TEST = Foo::Bar::TEST
    TEST2 = Foo::Bar.is_ok
  end
end

Здесь я получаю:

Foo::Bar::TEST2 # => true

как и ожидалось.

1 Ответ

0 голосов
/ 23 января 2019

Это просто вопрос порядка определения:

module Foo
  module Bar
    def self.is_ok
      true
    end
    TEST = is_ok
  end
end

работает точно так, как вы ожидаете.

Простая причина в том, что определения классов Ruby оцениваются построчно; в то время, когда в вашем примере назначено TEST, ::is_ok еще не определено!

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