Ruby 我需要一个类来调用一个类,该类将它作为一个属性包含在许多场景中——这应该如何实现?
我是Ruby的新手,来自Objective-C和Swift 我遇到了一个问题,其中一个对象包含另一个对象作为属性。第二个对象有一个Ruby 我需要一个类来调用一个类,该类将它作为一个属性包含在许多场景中——这应该如何实现?,ruby,delegates,structure,Ruby,Delegates,Structure,我是Ruby的新手,来自Objective-C和Swift 我遇到了一个问题,其中一个对象包含另一个对象作为属性。第二个对象有一个beginStream函数,通过该函数,它从服务器流式传输数据,当它获得新数据时,它就会产生,因此第一个对象可以响应。看起来是这样的: class StreamManager def initialize @streams = Array.new end def setup_user_stream(user_id)
beginStream
函数,通过该函数,它从服务器流式传输数据,当它获得新数据时,它就会产生,因此第一个对象可以响应。看起来是这样的:
class StreamManager
def initialize
@streams = Array.new
end
def setup_user_stream(user_id)
stream = Stream.new(user_id)
@streams << stream
stream.begin_stream do |message|
puts "A message was received: #{message}"
end
end
end
class Stream
def initialize(user_id)
@user_id = user_id
end
def begin_stream
Thread.new do
# Begins stream
@client = Stream::Client.new(user_id)
@client.on_error do
# need to let StreamManager know about this
end
@client.on_message do |message|
yield message if block_given?
end
end
end
end
类流管理器
def初始化
@streams=Array.new
结束
def设置用户流(用户id)
stream=stream.new(用户id)
@streams父级StreamManager
可以将自身作为变量传递给子级Stream
def initialize(stream_manager, user_id)
@stream_manager = stream_manager
@user_id = user_id
end
以及在设置\用户\流中初始化它:
stream = Stream.new(self, user_id)
如果您想要更详细的代码,可以使用命名关键字:
def initialize(:stream_manager, :user_id)
然后:
父级StreamManager
可以将自身作为变量传递给子级Stream
def initialize(stream_manager, user_id)
@stream_manager = stream_manager
@user_id = user_id
end
以及在设置\用户\流中初始化它:
stream = Stream.new(self, user_id)
如果您想要更详细的代码,可以使用命名关键字:
def initialize(:stream_manager, :user_id)
然后:
这里有几种不同的方法:
1) 您仍然可以使用在Cocoa中使用的委托模式。唯一的区别是你没有一个正式的协议/接口。流将采用委托/回调处理程序对象,该对象是实现某些方法的任何对象。通过在调用这些方法之前检查对象对它们的响应,可以使这些方法成为可选的。您的StreamManager可以实现此接口,并将其自身作为依赖项传递给流
2) 您可以在流类上定义错误和消息的回调,而不是将单个块传递给begin\u Stream方法
3) 保留现有API,而不是生成消息,将消息或错误封装在结果对象中并生成该结果。我想这可能是我的首选
很抱歉没有代码示例,但我正在我的iPhone上写这篇文章 这里有几种不同的方法:
1) 您仍然可以使用在Cocoa中使用的委托模式。唯一的区别是你没有一个正式的协议/接口。流将采用委托/回调处理程序对象,该对象是实现某些方法的任何对象。通过在调用这些方法之前检查对象对它们的响应,可以使这些方法成为可选的。您的StreamManager可以实现此接口,并将其自身作为依赖项传递给流
2) 您可以在流类上定义错误和消息的回调,而不是将单个块传递给begin\u Stream方法
3) 保留现有API,而不是生成消息,将消息或错误封装在结果对象中并生成该结果。我想这可能是我的首选
很抱歉没有代码示例,但我正在我的iPhone上写这篇文章 几个问题。。。这难道不会使流管理器成为流的强持有属性吗?有没有一种方法可以让流管理器不一定是StreamManager类,而只是一个符合协议的类?这样合适吗?或者这仍然不是真正的Ruby吗?当然,您可以为管理器编写一个包装器类并引用它。我不会用“它是不是ruby的东西”来考虑它,因为它实际上取决于你在设计模式方面坚持什么样的标准。如果管理器类是抽象的,并且您想要编写一些特定于用例的代码,那么无论如何这很好,制作一个包装器。但在一般意义上,如果存储对单独类实例的引用,我看不出妖怪在哪里。。。这难道不会使流管理器成为流的强持有属性吗?有没有一种方法可以让流管理器不一定是StreamManager类,而只是一个符合协议的类?这样合适吗?或者这仍然不是真正的Ruby吗?当然,您可以为管理器编写一个包装器类并引用它。我不会用“它是不是ruby的东西”来考虑它,因为它实际上取决于你在设计模式方面坚持什么样的标准。如果管理器类是抽象的,并且您想要编写一些特定于用例的代码,那么无论如何这很好,制作一个包装器。但在一般意义上,如果存储对单独类实例的引用,我看不出妖怪在哪里。