如何在 Dart 中 return 这种疯狂的类型?

How to return this crazy type in Dart?

我正在尝试模拟 mongo_dart 中的 .find 函数,它要求 return 函数,但我无法解决。它有一个类型,然后是另一个类型,然后是名称。我如何表达这种 return 类型。

这显然是合法的代码:

Stream<Map<String, dynamic>> Function([selector]) _test(Invocation realInvocation) {
}

class selector {
}

返回 Stream<Map<String, dynamic>> 会引发错误 - 它说它需要 Stream<Map<String, dynamic>> Function([selector])

求助!我从来没有见过这样的东西,Google 也没什么用。


编辑,感谢 Irn 下面的评论,最终解决方案是这段代码。查看他们的回答和我为澄清所做的评论

Stream<Map<String, dynamic>> Function([dynamic]) _test(Invocation realInvocation) {
  return ([selector]) {
    return Stream.value({"response":true});
  };
}

return 类型是 Stream<Map<String, dynamic>> Function([selector])。 那是 函数 的类型。该类型的函数声明可以是:

Stream<Map<String, dynamic>> createMaps([selector s]) async* {
  ... do something ...
    yield map;
  ... do more ...
}

[selector] 部分意味着该函数必须接受一个类型为 selector 的可选位置参数(really 应该大写以明确这是一种类型)。 Stream<Map<String, dynamic>> 表示函数 return 是一个流。

因此,由于 _test return 是这样的函数,您可以将测试编写为:

Stream<Map<String, dynamic>> Function([selector]) _test(Invocation realInvocation) {
  return createMaps; // But should probably use realInvocation for something.
}

(这将使 _test 的类型成为:

Stream<Map<String, dynamic>> Function([selector]) Function(Invocation)

真是一口啊!)