如何解决dart gRPC:函数的含义是什么?
我是Flutter(dart)gRPC的新手。我正在学习https://grpc.io/docs/languages/dart/basics/给出的教程。但是我对该函数中的dart语法感到困惑。
Future<Feature> getFeature(grpc.ServiceCall call,Point request) async {
return featuresDb.firstWhere((f) => f.location == request,orElse: () => Feature()..location = request);
}
实际上,我不明白参数f
的含义以及为什么会有orElse
的原因。我发现=>
的意思是箭头功能,可以简单地理解为返回语句,但我不能说我完全理解了它。任何解释将不胜感激。
解决方法
firstWhere
方法采用Predicate
。 Predicate
只是一个接收对象并返回true
或false
的函数。因此,基本上是说“给我列表中的第一个对象,其中我给您的函数返回true 。orElse
是可选的,名为参数这就是说,如果您到达列表的末尾,并且没有一个对象在通过我刚刚提供的函数传递时返回true,那么请将该函数作为最后的手段执行并返回它产生的任何值。 Predicate
就像一个过滤器。它接受一个对象,如果应该通过过滤器,则返回true
;如果不应该通过过滤器,则返回false
。通过检查每个元素是否通过过滤器,并且第一次执行该操作,它将返回该元素。如果没有任何东西通过过滤器,它将使用firstWhere
生产者函数生成一些值以返回,因为没有任何东西可以独自解决。
orElse
是一个根据其参数返回true或false的函数-它是(f) => f.location == request
Predicate
是() => Feature()..location = request
。没有参数但产生值的函数。在这种情况下,其值等于新的Producer
,而Feature
的值等于location
。 request
评估为已分配的值。级联assignment
确保将返回..
而不是Feature
对象Point
。
所以基本上您可以这样想:
request
所以这段代码的目的似乎是,检查是否已存在list.giveMeTheFirstObjectWhere(thisFunctionReturnsTrue,orElse: giveMeTheValueThisFunctionProvidesIfNoneOfTheElementsReturnedTrueUsingTheOtherFunction)
,如果存在,则返回第一个类似的Feature
。如果不存在,它将创建一个新的Feature
并返回它(但是,这个新创建的文件不会自动添加到列表/数据库中)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。