0

我试图模拟 mongo_dart 中的 .find 函数,它要求一个我无法解决的返回函数。它有一个类型,然后是另一个类型,然后是名称。什么/如何表达这个返回类型。

这显然是合法的代码:

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

class selector {
}

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

帮助!我从来没有见过这样的东西,谷歌也没有多大帮助。


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

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

1 回答 1

2

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

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

[selector]部分意味着该函数必须接受一个带有类型的可选位置参数selector实际上应该大写以明确它是一种类型)。这Stream<Map<String, dynamic>>意味着该函数返回一个流。

因此,由于_test返回这样一个函数,您可以将 test 编写为:

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)

这是一口!)

于 2020-06-18T07:41:57.097 回答