首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Dart (颤动)中将两个“yield”放在一起,只有第二个会被执行

在Dart中,将两个"yield"放在一起时,只有第二个会被执行。这是因为在Dart中,"yield"关键字用于定义一个生成器函数,它可以产生一个序列的值。当执行到一个"yield"语句时,函数会暂停执行并将当前的值返回给调用者。当再次调用生成器函数时,它会从上次暂停的地方继续执行。

当两个"yield"放在一起时,第一个"yield"会执行并返回一个值,但是生成器函数会立即暂停。第二个"yield"语句不会被执行,因为生成器函数已经暂停了。如果想要执行第二个"yield"语句,需要再次调用生成器函数。

以下是一个示例代码,演示了在Dart中将两个"yield"放在一起的情况:

代码语言:txt
复制
Iterable<int> generateNumbers() sync* {
  yield 1;
  yield 2;
}

void main() {
  var numbers = generateNumbers();
  
  print(numbers.first);  // 输出:1
  print(numbers.last);   // 输出:2
}

在上面的示例中,generateNumbers是一个生成器函数,使用了sync*关键字来定义。它包含了两个"yield"语句,分别产生了值1和值2。当我们调用generateNumbers函数时,它会返回一个可迭代对象numbers。我们可以通过numbers.firstnumbers.last来获取生成器函数产生的第一个和最后一个值。

需要注意的是,生成器函数在每次调用时都会从上次暂停的地方继续执行,直到没有更多的"yield"语句可执行为止。如果我们想要执行第二个"yield"语句,可以再次调用生成器函数,例如:

代码语言:txt
复制
void main() {
  var numbers = generateNumbers();
  
  print(numbers.first);  // 输出:1
  
  numbers = generateNumbers();  // 再次调用生成器函数
  
  print(numbers.last);   // 输出:2
}

在这个示例中,我们再次调用了generateNumbers函数,并将返回的可迭代对象赋值给numbers。这样,我们就可以获取到第二个"yield"语句产生的值。

总结起来,当在Dart中将两个"yield"放在一起时,只有第二个"yield"会被执行。如果想要获取第一个"yield"产生的值,需要在调用生成器函数之前获取。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

上手指南 | Dart,随用随查

Expr1 : expr2 类型问题:警告和错误,警告表示代码可能无法正常工作,但不会阻挡程序的执行,错误可能是编译或者运行时的错误,编译时错误会阻止代码的执行,运行时错误会导致代码执行中引发异常(...var p = const ImmutablePoint(2, 2); 构造函数名之前加 const 关机字,来创建编译时常量 注意:构造两个相同编译时常量会产生一个相同的实例 常量上下文中...获取 future 的结果 //getNetData 返回的 future 有返回结果时,就会自动调用 then 中传入的函数 //该函数会被放在事件循环中,被执行 getNetData().then(...getNetData 中,拿到两个结果进行拼接,然后一起返回 返回值会被包装在一个 Futter 中,调用处就可以使用 them 直接拿到结果 --- > 参考文献:官方文档,Flutter...实战,[Dart 异步](https://juejin.cn/post/6844903942795558919#heading-11) ## 下面让我们一起 > happy codeing

1.8K70

上手指南 | Dart,随用随查

Expr1 : expr2 类型问题:警告和错误,警告表示代码可能无法正常工作,但不会阻挡程序的执行,错误可能是编译或者运行时的错误,编译时错误会阻止代码的执行,运行时错误会导致代码执行中引发异常(#...var p = const ImmutablePoint(2, 2); 构造函数名之前加 const 关机字,来创建编译时常量 注意:构造两个相同编译时常量会产生一个相同的实例 常量上下文中,const...获取 future 的结果 //getNetData 返回的 future 有返回结果时,就会自动调用 then 中传入的函数 //该函数会被放在事件循环中,被执行 getNetData().then(...getNetData 中,拿到两个结果进行拼接,然后一起返回 返回值会被包装在一个 Futter 中,调用处就可以使用 them 直接拿到结果 --- > 参考文献:官方文档,Flutter...实战,[Dart 异步](https://juejin.cn/post/6844903942795558919#heading-11) ## 下面让我们一起 > happy codeing

1.8K50
  • Flutter 开发实战与前景展望 - RTC Dev Meetup

    image 2、React Native 和 Flutter 之间的对比 Flutter 作为后来者,难免会被用来和 React Native 进行对比,在这个万物皆是 JS 的时代,Dart 和 Flutter...image 1.5、async await / async* yield Dart 中 async await / async* yield 等语法糖,代表 Dart 中的 Future 和 Stream...1.6、Mixins Dart 中支持混入的模式,如下图所示,混入时的基础顺序是从右到左依次执行的,而且和 super 有关,同时 Dart 还支持 mixin 关键字的定义。...image 其实 State 对象的创建和更新时机导致的: 1、createState 只 StatefulElement 创建时才会被创建的。...那问题又来了,如果这时候队列里两个呢? 它们的 onTapDown 都会被触发,但是 onTap 只有一个获得。 如果有两个滑动 ScrollView 嵌套呢?

    1.9K20

    Flutter 1.17 中的导航解密和性能提升

    虽然之前介绍过 build 方法本身很轻,但是“不需要”的时候“不执行”明显更符合我们的预期,而这个优化的 PR 主要体现在 stack.dart 和 overlay.dart 两个文件上。...offstageChildren 中只有 entry.maintainState 为 true 才会被添加到队列; @override Widget build(BuildContext context...所以可以看到,当页面完全打开之后,最前面的两个 OverlayEntry: 蒙层 OverlayEntry 的 opaque 会被设置为 true,这样后面的 OverlayEntry 就不会进入到...false ,因为 PopupRoute 一般是有透明的背景,需要和上一个页面一起混合展示。...三、新版 1.17 中 Overlay 那为什么 1.17 之前,打开新的页面时旧的页面会被执行 build ?

    95920

    Flutter 面试知识点集锦

    开发过程中,assert(unicorn == null); 只有条件为真才正常,否则直接抛出异常,一般用在开发过程中,某些地方不应该出现什么状态的判断。...Zone Dart 中可通过 Zone 表示指定代码执行的环境,类似一个沙盒概念, Flutter 中 C++ 运行 Dart 也是 _runMainZoned 内执行 runZoned 方法启动...Dart 中另外一种异步操作, async* / yield 或者 Stream 可定义 Stream 异步, async* / yield 也只是语法糖,最终还是通过编译器转为 Stream。...Flutter 中的 Dart 的线程是以事件循环和消息队列的形式存在,包含两个任务队列,一个是 microtask 内部队列,一个是 event 外部队列,而 microtask 的优先级又高于 event...然后从队列头的 child 开始 for 循环执行 handleEvent 方法,执行 handleEvent 的过程不会被拦截打断。

    5.1K61

    【Flutter 专题】95 图解 Dart 单线程实现异步处理之 Task Queue

    Dart 的事件机制是根据任务调度优先级来实现的;其中将任务添加到 MicroTask Queue 微事件队列的方式有 scheduleMicrotask() 和 Future.microtask()...; 等两个队列的任务均执行完成后结束; Tips: 当任务队列执行 MicroTask Queue 微事件队列时,Event Queue 事件队列被卡住,即应用无法绘制图形,处理鼠标点击事件,无法对...,执行完第一个 then() 函数后才会执行第二个 then();且和尚理解为 then() 函数会在 Future() 执行之后立即执行,可以看作是存放在微事件队列中;因此整体的执行顺序是 sync(...待 Future.delayed D 执行结束或,Future A 的第二个级联 then() 函数和 whenComplete() 开始执行; f....D 事件队列末位后第一个 then() 函数已完成执行,此时可以执行第二个 then()02 和 whenComplete() 函数; c.

    83830

    【Unity面试篇】Unity 面试题总结甄选 |Unity进阶篇 | ❤️持续更新❤️

    Hinge Joint,可以模拟两个物体间用一根链条连 接在一起的情况,能保持两个物体一个固定距 离内部相互移动而不产生作用力,但是达到固定 距离后就会产生拉力。 4. 物体发生碰撞的必要条件?...yield 实际上就是返回一次结果,因为我们要一次一次枚举一个值出来,所以多个 yield 其实是个状态模式,第一个 yield 是状态 1,第二个 yield 是状态 2,每次访问时会基于状态知道当前应该执行哪一个...当代码满足以上两个条件时,此方法的执行就具有了迭代器的特质,其核心就是 MoveNext方法。 方法内的内容将会被分成两部分:yield 之前的代码和 yield 之后的代码。...线程和协同程序的主要不同在于:多处理器情况下,从概念上来讲多线程程序同时运行多个线程;而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只必要时才会被挂起。...作用:一个协同程序执行过程中,可以在任意位置使 用yield语句。yield的返回值控制何时恢复协同程序向 下执行。协同程序在对象自有帧执行过程中堪称优 秀。协同程序性能上没有更多的开销。

    2.3K22

    Python指南:高级程序设计之过程型程序设计进阶

    “惰性”评估的方法,这意味着只有实际需要的时候才计算值,这比一次性计算一个很大的列表要更加高效。...如果object是一个字符串,该字符串会先被解析为一组Python语句,然后执行(除非发生语法错误)。如果object是一个code对象,那么它只是被简单的执行。...这两个问题都可以通过穿第一个字典作为第二个参数来解决,字典提供了存放对象引用的场所,使得其 exec() 调用结束后仍然可以存放。...执行上面的exec() 调用后,context 字典中将包含一个名为“area_of_shpere” 的键,其值为 area_of_sphere() 函数,下面展示如何访问与调用该函数: area_of_sphere...如果存在注释,就会被添加到函数的 __annotations__ 字典中;如果不存在,此字典为空。

    78140

    Dart的语法详解系列篇(四)-- 泛型、异步、库等有关详解九、泛型(Generics)十、库和可见性十一、异步支持十二、Isolates十三、生成器(Generators)十四、类型定义十五、元数据

    例如: import 'libs/mylib.dart'; (二)指定库前缀 如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。...例如:lib/demo1/a.dart, lib/demo2/b.dart两个文件。现在b.dart这个文件需要引用a.dart,可以使用import '../demo1/a.dart'导入。...async函数只遇到第一个await表达式时执行。然后它返回一个Future对象,仅在await表达式完成后才恢复执行。...await表达式使执行暂停,直到该对象可用。 如果在使用await时遇到编译时错误,请确保awaitasync函数中。...所有Dart代码都有两个注解:@deprecated和 @override。

    3.8K40

    Flutter | 异常处理

    本文示例代码 了解 Flutter 异常捕获之前需要先了解一下 Dart 的异常处理以及 Dart 的单线程模型,只有知道了代码的执行流程,我们才能只要该在什么地方去捕获异常 Dart 中的异常...如果 try 住异常,会先执行对应的 catch,最后执行 finally Dart 单线程模型 如果程序中发送异常且没有被捕获,那么程序将会被终止,但是这在 Dart 中则不会,根本原因是因为和他的运行机制有关系...(翻译自官方提供的图): ​ Dart 单线程机制中是以消息循环机制来运行的,其中包含两个任务队列,一个是 微任务队列 microtask queue,一个是事件队列 event queue 。...从图中可知道,微任务队列高于事件队列 ​ 现在来介绍一下 Dart 线程的运行过程,如上图,入口 main 执行完成之后,消息循环机制就会启动,首先会按照先进先出的顺序逐个执行微任务队列中的任务,事件执行完成之后程序便会退出...,但是事件任务执行的过程中也可以插入新的微任务和事件任务,这种情况下整个县城的执行过程便是一直循环,不会退出,而在 Flutter 中,主线程的执行过程正是如此,永不终止 ​ Dart 中,所有的外部事件任务都在事件队列中

    82310

    Flutter Platform Channels(一)

    因此,虽然Flutter邀请你Dart中编写app,但你依然可以宿主app中使用Java/Kotlin或*Objective-C/Swift执行尽可能多的操作,直接调用平台特定的API。...在上面的例子中,对于回传值并没有兴趣,但是空回复(null)对于Dart Future完成和两个平台回调的执行是必要的。 线程。 收到消息和回复,并且必须在平台的主UI线程上发送。...Dart中,每个Dart isolate只有一个线程,即每个Flutter视图,因此不必对使用了哪个线程而感到困惑。 异常。...Dart或Android消息处理程序中抛出的任何未捕获的异常都会被框架捕获并记录,并将null发送回发送方。回复处理程序中抛出的未捕获异常也会被记录。...当然,Dart,Android和iOS编解码器实现是一起演进的,以确保接收者可以成功解码由发送者发送的已被编码内容,这其中包括两个方向。 空(Null)消息。

    4.4K01

    Flutter--Dart基础语法(四)异步

    阻塞和非阻塞关注的是程序等待调用结果(消息,返回值)时的状态。 阻塞式调用: 调用结果返回之前,当前线程会被挂起,调用线程只有得到调用结果之后才会继续执行。...这时,我们可能有两个问题: 问题一: 如果在多核CPU中,单线程是不是就没有充分利用CPU呢?这个问题,我会放在后面来讲解。 问题二: 单线程是如何来处理网络通信、IO操作它们返回的结果呢?...2、网络请求发出去后,该事件循环不会被阻塞,而是发现要执行的onPressed函数已经结束,会将它丢弃掉。...微任务队列的优先级要高于事件队列; 也就是说事件循环都是优先执行微任务队列中的任务,再执行 事件队列 中的任务; 那么Flutter开发中,哪些是放在事件队列,哪些是放在微任务队列呢?...Future中通常有两个函数执行体: Future构造函数传入的函数体 then的函数体(catchError等同看待) 那么它们是加入到什么队列中的呢?

    1.4K20

    Flutter-从入门到项目 04:Dart语法快速掌握(上)

    有时,判断是一个表达式还是一个语句会很重要,所以我们要准确了解这两个单词。 ?Dart tools可报告两类问题:警告(warning ⚠️)和错误(error ❎)。...警告只是迹象表明,代码可能无法正常工作,但他们不会阻止程序的执行。错误可以是编译时或运行时,编译时的错误阻止代码执行;当代码执行时一个运行时的错误会导致一个 异常(exception)被抛出。 ?...Dartium:内嵌 Dart VM 的 Chromium ,可以浏览器中直接执行 dart 代码。 Dart2js:将 Dart 代码编译为 JavaScript 的工具。...3 deferred 2 hide 1 set 2 static 2 do if show 1 implements 2 dynamic 2 带有上标1的单词是上下文关键词,它们只有特定的地方才有意义...只有两个对象具有 bool类型 : 布尔字面值 true 和 false,它们都是编译时常量。因为和我们一般了解一致 我们就不展开篇幅 D: Lists 类型 数组集合类型是比较广泛适用的!

    1.4K30
    领券