Совместное использование переменных между классами Ruby в одном модуле

#ruby

#ruby

Вопрос:

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

 # File 1.rb

module Search
  class A
    attr_accessor :results

    def find_results
      self.results = [somethings]
    end

    def do_something_with_results
      b = B.new.do_something
      b.response #=> something
      c = C.new.use_b_response_do_something
      return c.did_something
    end

  end
end


# File 2.rb

module Search
  class B

  end
  class C
  end
end
 

У меня есть модуль Search с классами A, B, C
Класс A что-то делает и возвращает данные, которыми необходимо поделиться с классами B и C, чтобы что-то сделать с этими данными (уточнить их, отправить куда-нибудь, вернуть true или false).

Как я могу поделиться этой информацией между классами? Я делал это, что, на мой взгляд, неправильно

 def do_something
   b = B.new.doing_something
   c = C.new.something_else(b.some_attr)
end
 

что неэффективно

Комментарии:

1. Не совсем ясно, каков ваш вариант использования, но вы могли бы попробовать использовать наследование. Если A , B , и C все они наследуются от общего базового класса, вы можете использовать переменную класса, например @@my_class_variable , для обмена данными между классами.

Ответ №1:

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

Одна вещь, которая может улучшить ваш код, — это передача b в c вместо этого.

 def do_something
    b = B.new.doing_something
    c = C.new(b).something_else
end
 

Но это зависит от вашего варианта использования…