Как я могу инициализировать переменные экземпляра модуля в Ruby?

Это произошло из-за того, что я использовал в своем приложении redux-saga v1.0.2, а response-admin использует v0.16.0 для внутреннего использования. См. https://github.com/marmelab/react-admin/issues/3029

.

77
задан Andrew Grimm 16 February 2011 в 04:21
поделиться

3 ответа

Инициализируйте их в определении модуля.

module MyModule
  # self here is MyModule
  @species = "frog"
  @color = "red polka-dotted"
  @log = []

  def self.log(msg)
    # self here is still MyModule, so the instance variables are still available
    @log << msg
  end
  def self.show_log
    puts @log.map { |m| "A #@color #@species says #{m.inspect}" }
  end
end

MyModule.log "I like cheese."
MyModule.log "There's no mop!"
MyModule.show_log #=> A red polka-dotted frog says "I like cheese."
                  #   A red polka-dotted frog says "There's no mop!"

Это установит переменные экземпляра, когда модуль будет определен. Помните, Вы можете alwasys вновь открыть модуль позже, чтобы добавить больше переменных экземпляра и определений метода, или переопределить существующие:

# continued from above...
module MyModule
  @verb = "shouts"
  def self.show_log
    puts @log.map { |m| "A #@color #@species #@verb #{m.inspect}" }
  end
end
MyModule.log "What's going on?"
MyModule.show_log #=> A red polka-dotted frog shouts "I like cheese."
                  #   A red polka-dotted frog shouts "There's no mop!"
                  #   A red polka-dotted frog shouts "What's going on?"
105
ответ дан rampion 24 November 2019 в 10:59
поделиться

Можно использовать:

def init(var=0)
 @var = var
end

И это примет значение по умолчанию к 0, если Вы ничего не передадите.

Если Вы не хотите должными быть называть его каждый раз, Вы могли бы использовать что-то вроде этого:

module AppConfiguration
   mattr_accessor :google_api_key
   self.google_api_key = "123456789"
...

end
5
ответ дан Brian 24 November 2019 в 10:59
поделиться

для класса я сказал бы, что следующее, так как инициализирование называют каждый раз, когда Вы .new новый экземпляр класса.

def initialize
   @var = 0
end

от практического Ruby:

Это продолжает, который инициализирует модуль, будет назван, если включение класса инициализирует вызовы супер, но не упоминает, что это - последствие того, как супер работы везде, не специальная обработка для инициализируют. (Почему мог бы каждый принимать инициализировать, получает специальную обработку? Поскольку это получает специальную обработку относительно видимости. Особые случаи создают беспорядок.)

2
ответ дан 24 November 2019 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: