dart - 向对象添加属性(或至少类似的结果)

标签 dart

首先,我正在做的事情的背景。我正在运行一个处理 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/

相关文章:

list - 在 flutter 列表中使用 future 对象的数据

firebase - 如何在服务器端访问dart中的firestore

dart - 从字段列表到嵌套列表

Flutter Dropdown : A value of type 'Object?' can't be assigned to a variable of type 'String' . - 'Object' 来自 'dart:core'

Dart:使用 RandomAccessFile 替换文件内的内容

flutter - 如果 StreamBuilder 中的流返回 null,我该怎么办?

dart - 如何在 dart args 包中使用必填字段

date - 在ListView中倒计时(Flutter)

flutter - 如何在 Flutter 中创建粘性商店按钮动画?

dart - dart2js是否支持ecmascript 6编译?