在Dart中,将两个"yield"放在一起时,只有第二个会被执行。这是因为在Dart中,"yield"关键字用于定义一个生成器函数,它可以产生一个序列的值。当执行到一个"yield"语句时,函数会暂停执行并将当前的值返回给调用者。当再次调用生成器函数时,它会从上次暂停的地方继续执行。
当两个"yield"放在一起时,第一个"yield"会执行并返回一个值,但是生成器函数会立即暂停。第二个"yield"语句不会被执行,因为生成器函数已经暂停了。如果想要执行第二个"yield"语句,需要再次调用生成器函数。
以下是一个示例代码,演示了在Dart中将两个"yield"放在一起的情况:
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.first
和numbers.last
来获取生成器函数产生的第一个和最后一个值。
需要注意的是,生成器函数在每次调用时都会从上次暂停的地方继续执行,直到没有更多的"yield"语句可执行为止。如果我们想要执行第二个"yield"语句,可以再次调用生成器函数,例如:
void main() {
var numbers = generateNumbers();
print(numbers.first); // 输出:1
numbers = generateNumbers(); // 再次调用生成器函数
print(numbers.last); // 输出:2
}
在这个示例中,我们再次调用了generateNumbers
函数,并将返回的可迭代对象赋值给numbers
。这样,我们就可以获取到第二个"yield"语句产生的值。
总结起来,当在Dart中将两个"yield"放在一起时,只有第二个"yield"会被执行。如果想要获取第一个"yield"产生的值,需要在调用生成器函数之前获取。
领取专属 10元无门槛券
手把手带您无忧上云