Экспорт переменных из модуля - PullRequest
2 голосов
/ 25 февраля 2012

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

module A
  extend self
  attr_accessor :two, :four
  ONE = "one"
  @two = "two"
  @three = "three"
  @@four = "four"
  @@five = "five"
  def six
    "six"
  end
end

И мне нужно это внутри другого файла:

require 'a'
include A
p ONE     # => "one"
p two     # => nil
p A.two   # => "two"
p three   # => error
p four    # => nil
p five    # => error
p six     # "six"

Кажется, что любая переменная класса либо выдает мне ошибку, либо ноль, если я специально не добавляю в нее имя модуля. Я думал, что использование include A предотвратит это. Как мне экспортировать эти переменные класса, чтобы я мог ссылаться на них как two вместо использования A.two?

1 Ответ

0 голосов
/ 26 февраля 2012

если вы определяете переменные на уровне класса / модуля, тогда это переменная экземпляра класса, а не переменная экземпляра. мы устанавливаем методы получения с помощью ||=, потому что модули не имеют метода инициализации;

module A
  ONE = "one"

  attr_writer :two

  def two
    @two ||= "two"
  end

  def three
    @@three ||= "three"
  end

  def three=(val)
    @@three = val
  end
end

Тогда вы можете использовать методы напрямую;

include A

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