像这样的 Monkeypatching Ruby 类通常被认为是不好的做法。您可能想要生成一个单独的类。
为了使socket.write "#{message}\r\n"
调用包含更多信息,您需要覆盖to_s
on String
。不过要小心!这几乎肯定会破坏事情,因为该方法通常在很多地方被调用。
我不知道你在代码中使用它的目的是什么,所以你应该选择一个更好的名字,但你可以这样做:
class StringWithID
attr_reader :id, :string
def self.from_network(bytes)
id, string = bytes.unpack("Qm0")
new(id, string)
end
def initialize(id = nil, string)
@id = id || Time.now.nsec.to_i
@string = string
end
def to_s
@string
end
alias :to_s :to_str
def to_network
[@id, @string].pack("Qm0")
end
end
然后你可以这样称呼它:
str = StringWithID.new("some string")
socket.write "#{str.to_network}\r\n"
然后在网络的另一端:
str = StringWithID.from_network(socket.gets)