我想记录发送和接收消息的事件,并使用它们对整个消息传递过程进行某种可视化。但是,我在实现配对这两个事件的可靠方式时遇到了问题:
唯一可靠的方法是为每条消息附加一些独特的信息,并使用它来连接事件,但手动包装和展开每条消息将是不优雅的,并且容易出错。
有没有办法在邮件中添加元数据?或者任何其他方法可靠地配对发送和接收消息的事件?
答案 0 :(得分:-1)
这个怎么样?
object foo {
// ID has a public getter and private setter
trait Msg {
private var _id = 0
def id = _id
private[foo] def id_=(value: Int): Unit = _id = value
}
// Companion object for the creation of Foo with an ID
object Foo {
def apply(id: Int, s: String): Foo = {
val msg = Foo(s)
msg.id = id
msg
}
}
// Private constructor => must be created from companion object
case class Foo private (s: String) extends Msg
}
val msg = foo.Foo(42, "hello")
println(msg)
println(msg.id)
输出:
Foo(hello)
42
让所有邮件扩展Msg特征。 这样,只能在创建消息期间设置ID,然后才能设置为只读。