在类ruby之间共享实例变量

我知道这个问题之前已经得到了回答,但我似乎无法使任何解决方案都有效

我正在为我需要调用的API创建一个ruby包装器。 Interface类完成了api的所有会话处理和实际调用,但是我想为我将最常执行的函数构建帮助器类。 我遇到的问题是我需要一种方法来跨多个辅助类维护一个Interface类的实例。

这是我到目前为止的代码

require_relative 'interface' module Api_Helper attr_accessor :xmlmc #get a new instance of the interface, This should be the only instance used. #I don't know if this needs to go in its own module def initialize server, port = '5015' @xmlmc = Xmlmc::Interface.new server, port end end module Xmlmc class API include Api_Helper module Session #session helpers use invoke method to send calls to the api via the interface class def invoke service, operation, parameters Xmlmc::API.xmlmc.invoke service, operation, parameters end end module Data #data helpers use invoke method to send calls to the api via the interface class def invoke service, operation, parameters Xmlmc::API.xmlmc.invoke service, operation, parameters end end def session #extend the session module into its own class _session = Object.new _session.extend Session _session end def data #extend the data helpers into its own class _data = Object.new _data.extend Data _data end end end 

我希望能够像这样使用我的代码。

 api = Xmlmc::API.new 'localhost', '2000' @session = api.session @session.logon 'username', 'password' @data = api.data @data.query = 'select * from table' #requires a session first. 

我遇到的问题是Interface类处理会话令牌,该会话令牌从一个调用到另一个调用。 我希望能够将我的代码干净地分成几个部分,比如sessiondata同时只使用一个接口类的实例。

我不希望这些方法返回的不仅仅是API返回值。 那是我不想手动传递接口类或会话变量的实例等。这可能吗?