gpt4 book ai didi

Ruby 套接字继承

转载 作者:行者123 更新时间:2023-12-03 12:06:50 25 4
gpt4 key购买 nike

我正在编写一个扩展 TCPSocket 的 Ruby 类.假设它看起来像这样:

class FooSocket < TCPSocket
def hello
puts 'hello'
end
end

我有一个 TCPServer监听传入连接
server = TCPServer.new 1234
socket = server.accept

当我的服务器最终接受连接时,它将返回 TCPSocket .但是,我想要一个 FooSocket这样我就可以调用 socket.hello .

如何更改 TCPSocket变成 FooSocket ?

我可以将我想要的方法和属性直接打到 TCPSocket 上。类,但我在其他地方使用它,所以我不想这样做。

可能最简单的解决方案是编写一个封装 TCPSocket 的类。 , 并传递 accept 返回的套接字作为参数。但是,我很想知道如何通过继承来做到这一点——我一直在努力思考它,但无法弄清楚。

提前致谢。

最佳答案

我认为最简单的方法是制作 FooSocket一个模块,然后是 extend它进入你的TCPSocket需要特殊方法的s。以下是一些如何使用它的示例:

module FooSocket
def hello
self.puts 'hello' # could also be written without the 'self',
end # but it is clearer this way because it may
end # be mistaken for the Kernel method.

server = TCPServer.new 1234
socket = server.accept.extend FooSocket

您也可以轻松覆盖 TCPServer返回其中之一:
class TCPServer
alias old_accept accept
def accept
old_accept.extend FooSocket
end
end

如果您不想覆盖标准类,您可以在您的服务器上定义一个单例类(我会这样做),因为您很可能只有一个服务器。为此,请替换行 class TCPServer在上面的示例中, class << server .

关于Ruby 套接字继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com