首先,我正在做的事情的背景。我正在运行一个处理 HttpRequests 的 HttpServer。
HttpServer.bind(ADDRESS, PORT).then((HttpServer server) {
listenSubscription = server.listen(onRequest);
});
void onRequest(HttpRequest request) {
//handle request here
}
我想为所有这些添加一些日志记录,并且由于这一切的异步性质,想要向请求添加一些识别标记(以便我可以将请求收据与响应相匹配,例如)。
onRequest()
里面的代码调用一堆其他函数来做不同的事情(处理 GET 与 POST 请求等),所以简单地在顶部生成一个 id 是一个麻烦的解决方案,因为我必须通过所有其他函数调用传递它。然而,我已经绕过 HttpRequest
对象,所以我认为抛出 id
会很好字段,就像在 Javascript 中一样,只是 Dart 不能那样工作。然后想法转到子类化
HttpRequest
类,但转换 HttpRequest
反对 onRequest()
方法接收似乎比我的需要更多的麻烦和开销。所以我问,是否有任何惯用的 Dart 方式将一些数据附加到现有对象?如果没有惯用的东西,那么您能想到的最简单的(在代码和运行时复杂性方面)方法是什么?
最佳答案
嗯,有一个 Expando ,但我不知道性能影响。
就像是:
// somewhere top level. Create this once.
final loggingId = new Expando();
...
// inside of onRequest
loggingId[request] = generateId();
...
// later inside log()
print(loggingId[request]);
根据我的理解,Expandos 就像弱引用 map 。
关于dart - 向对象添加属性(或至少类似的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777984/