Как получить доступ к переменным класса во включенных модулях ruby? - PullRequest
5 голосов
/ 25 ноября 2011

Мне нужно знать, возможно ли для включенных модулей ruby ​​иметь доступ к переменным класса. Скажем:

require 'bar'

class Foo

 @i_am_important

  Bar.do_stuff

end

Module Bar
  def Bar.do_stuff
    @i_am_important.stuff...
  end
end

Есть ли способ заставить вышеуказанное работать?

edit: улучшенный пример, edit2: решенная проблема

Я просто изменил свой подход: Bar стал отдельным классом и получает «i_am_important» при инициализации Не может быть лучшим решением, но, наконец, работает. Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 25 ноября 2011

Почему вы хотите использовать переменную через ворота классов и модуля?Я думаю, что есть такой способ:

module Bar
  def do_stuff
    puts im_am_important
  end
end

class Foo
  include Bar

  def im_am_important
    100
  end
end

Foo.new.do_stuff  # => 100
0 голосов
/ 25 ноября 2011

Как насчет:

#foo.rb

@var
module My_foo 
  var = @var
  def My_foo.my_method(var)
    puts(var)
  end
end

#bar.rb
require 'foo'

class Bar
  extend My_foo
  @important_var = "bla"
  My_foo.my_method(@important_var)
end

ruby ​​bar.rb => бла

0 голосов
/ 25 ноября 2011

Вы можете включить модуль в класс, чтобы получить доступ как

    module MyModule
    @@my_val = 4
    end

    class MyClass
    include MyModule
    value = @@my_val
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...