我很难找到如何在模块中的其他实例之间共享类的共享实例的好例子。我甚至不确定我是否正确描述它:)
这是我试图实现的一般事项:
module NSX
class Manager
def initialize(server, user, password)
@nsx = RestClient::Resource.new(
server,
user: user,
password: password)
end
end
class Service
def initialize(some_args)
# assign instance variables, etc
end
def self.get(service_id)
# USE NSX::Manager INSTANCE HERE
obj = allocate
response = JSON.parse(instance_of_manager[service_id].get)
obj.send(:initialize, response)
obj
end
def save
# USE NSX::Manager INSTANCE HERE
instance_of_manager[self.id].post(self.to_json)
end
end
end
我想实例化一个NSX :: Manager对象,该对象包含服务的所有连接详细信息。我希望能够在其他NSX模块类中引用该实例,包括类方法和实例方法(例如,执行HTTP GET或HTTP PUT)。
我还没有找到任何关于如何做到这一点的好例子,或者它是否可能。
任何人都可以指出我正确的方向,或者给我一些关于如何在结构上处理这个问题的想法吗?
谢谢!
答案 0 :(得分:0)
module NSX
class Manager
attr_accessor :nsx
def initialize(nsx)
@nsx = nsx
end
end
class Service
def self.get()
puts NSXManager.nsx
end
def save
puts NSXManager.nsx
end
end
end
Creating a constant
可以从模块内部(或使用正确名称的其他任何地方)引用:
require_relative 'nsx'
manager = NSX::Manager.new(3)
NSX.const_set('NSXManager', manager)
NSX::Service.get
NSX::Service.new.save
--output:--
3
3
编辑: ---------------------------
module NSX
class Manager
attr_accessor :nsx
def initialize(nsx)
@nsx = nsx
NSX.const_set('NSXManager', self)
end
end
class Service
def self.get()
puts NSXManager.nsx
end
def save
puts NSXManager.nsx
end
end
end
练习模块:
require_relative 'nsx'
NSX::Manager.new(3)
NSX::Service.get
NSX::Service.new.save
--output:--
3
3