Как включить константы и переменные модуля? - PullRequest
7 голосов
/ 29 июля 2010

У меня есть модуль с константой и переменной.

Интересно, как я мог бы включить их в класс?

module Software
  VAR = 'hejsan'

  def exit
    @text = "exited"
    puts @text
  end
end

class Windows
  extend Software
  def self.start
    exit
    puts VAR
    puts @text
  end
end

Windows.start

Возможно ли это?

Ответы [ 2 ]

9 голосов
/ 31 января 2013

Рубин 1.9.3:

module Software
  VAR = 'hejsan'

  module ClassMethods
    def exit
      @text = "exited"
      puts @text
    end
  end

  module InstanceMethods

  end

  def self.included(receiver)
    receiver.extend         ClassMethods
    receiver.send :include, InstanceMethods
  end
end

class Windows
  include Software
  def self.start
    exit
    puts VAR
    puts @text
  end
end

Windows.start

В IRB:

exited
hejsan
exited
3 голосов
/ 29 июля 2010

Делать именно то, что вы хотите, невозможно.Переменные экземпляра строго относятся к объекту.

Это происходит, что вы ожидаете, но @text установлено на Windows, а не Software.

module Software
  VAR = 'hejsan'

  def exit
    @text = "exited"
    puts @text
  end
end

class Windows
  class <<self
    include Software
    def start
      exit
      puts VAR
      puts @text
    end
  end
end

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