このように Ruby クラスにモンキーパッチを適用することは、通常、悪い習慣と見なされます。おそらく、別のクラスを生成したいと思うでしょう。
呼び出しにさらに情報を含めるには、onsocket.write "#{message}\r\n"
をオーバーライドする必要があります。ただし、注意してください!そのメソッドは通常多くの場所で呼び出されるため、これはほぼ確実に問題を引き起こします。to_s
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)