我是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
生产者函数生成一些要返回的值,因为没有任何东西可以自己实现。(f) => f.location == request
是根据其参数返回true或false的函数-这是Predicate
() => Feature()..location = request
是Producer
。没有参数但产生值的函数。在这种情况下,其值等于新的Feature
且location
值等于request
。 assignment
评估为分配的值。级联..
确保将返回Feature
,而不是Point
对象request
。
所以基本上您可以这样想:list.giveMeTheFirstObjectWhere(thisFunctionReturnsTrue, orElse: giveMeTheValueThisFunctionProvidesIfNoneOfTheElementsReturnedTrueUsingTheOtherFunction)
因此,此代码的目的似乎是,检查是否已经存在Feature
,如果存在,则返回第一个此类Feature
。如果它不存在,它将创建一个新的Feature
并返回它(但是,这个新创建的代码不会自动添加到列表/数据库中)
关于flutter - dart gRPC:函数的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63843282/