问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何理解ES6的yield

发布网友 发布时间:2022-04-23 22:45

我来回答

2个回答

懂视网 时间:2022-05-07 08:36

本文实例讲述了PHP yield关键字功能与用法。分享给大家供大家参考,具体如下:【推荐阅读:php入门教程】

yield 关键字是php5.5版本推出的一个特性。生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。

Example #1 一个简单的生成值的例子

<?php
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
//注意变量$i的值在不同的yield之间是保持传递的。
yield $i;
}
}
$generator = gen_one_to_three();
foreach ($generator as $value) {
echo "$value
";
}
?>

简单来说就是:yield是仅仅是记录迭代过程中的一个过程值

补充示例:

示例2:

/**
* 计算平方数列
* @param $start
* @param $stop
* @return Generator
*/
function squares($start, $stop) {
if ($start < $stop) {
for ($i = $start; $i <= $stop; $i++) {
yield $i => $i * $i;
}
}
else {
for ($i = $start; $i >= $stop; $i--) {
yield $i => $i * $i; //迭代生成数组: 键=》值
}
}
}
foreach (squares(3, 15) as $n => $square) {
echo $n . ‘squared is‘ . $square . ‘<br>‘;
}
输出: 3 squared is 9 4 squared is 16 5 squared is 25 …

示例3:

//对某一数组进行加权处理
$numbers = array(‘nike‘ => 200, ‘jordan‘ => 500, ‘adiads‘ => 800);
//通常方法,如果是百万级别的访问量,这种方法会占用极大内存
function rand_weight($numbers)
{
$total = 0;
foreach ($numbers as $number => $weight) {
$total += $weight;
$distribution[$number] = $total;
}
$rand = mt_rand(0, $total-1);
foreach ($distribution as $num => $weight) {
if ($rand < $weight) return $num;
}
}
//改用yield生成器
function mt_rand_weight($numbers) {
$total = 0;
foreach ($numbers as $number => $weight) {
$total += $weight;
yield $number => $total;
}
}
function mt_rand_generator($numbers)
{
$total = array_sum($numbers);
$rand = mt_rand(0, $total -1);
foreach (mt_rand_weight($numbers) as $num => $weight) {
if ($rand < $weight) return $num;
}
}

热心网友 时间:2022-05-07 05:44

yield是ES6中的Generator(生成器)用来内部暂停本身运行的关键字。请注意“内部”一词,生成器函数并不能由外部逻辑暂停,只能由本身通过yield暂停。 yield关键字后可以跟随变量,也可以单独使用。如果yield后面跟随变量(我们可以称之为yield表达式),生成器函数暂停后再次恢复运行时,传入的参数作为整体yield表达式的值参与后续的逻辑运算;当yield后不跟随变量,单独使用的yield仅仅是作为暂停生成器函数使用,生成器恢复运行后被传入的参数作为yield的值参与后续运算。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
猛禽点烟器在什么位置? 哪家公司的Burkert角座阀性价比更高? 腊肠炒青豆做法 香肠炒青豆的家常做法大全怎么做好吃 我想模仿一个淘宝大店铺'主要是因为他们销量很好,。我想生产他们的... 模仿别人淘宝店铺算侵权吗?侵权赔偿标准介绍 applexsmax突然黑屏 大雁气功当代传人 贷款担保合同签字担保人没有来是不是有效 当一个习惯养成的时候,是不是戒不掉了 快手卖的冰岛是真的吗 马洪刚卖的冰岛普洱是真的吗? 太原光子嫩肤价格表 微波炉应该如何正确摆放? 微波炉内可放置哪些器皿? 微波炉应该放在什么地方 微波炉摆放禁忌 微波炉放在哪比较合适? 微波炉放那些位置好 微波炉放在什么位置比较好? 微波炉摆放禁忌? 微波炉到底放在什么地方合适? 如何将一张照片中的一个人物单独抠出来然后p在另一张照片中? 如何才能把人物从图片中完整的抠出来? 自己在家用烤箱烤红薯,怎样才能做出外面那种感觉? 小熊小的烤箱烤蛋糕需要的温度和时间 高帮鞋配深蓝色小脚牛仔裤怎么样? 还有鞋带怎么系?鞋带太短了,7个孔都穿的话,就打不了蝴蝶结了?SOS 牛仔衣下面的两个角怎么系 就是衣服下的两个绳子,好长,要怎么绑才好看?自己绑的特别扭 可以搭配牛仔裤,衬衣什么的吗?还有那个腰饰怎么拴呢?蝴蝶结是打在侧面好还是正面呢?谢谢咯!! 电烤箱烤红薯怎么样? javascript-es6新特性:使用扩展运算符快速将字符串转为字符数组_百度知 ... 宝宝衣服吐奶变黄时间久了要怎么才能洗掉 JS ES6 数组对象多组多个属性相加求和 100元以下的冰岛普洱茶饼是真的吗 Javascript的typeof返回哪些数据类型? 冰中岛普洱茶,冰岛壹号,冰岛乌金,如何鉴定真假?我网上购买的,可以帮我鉴定一下吗?_百度问一问 前端开发课程学习什么,难不难? 前端用到param2Obj是干什么的? 亲戚给了一块1976年的冰岛普洱,有朋友说那时候还没有这个品牌是假的,不知是真是假? javascript常用的技巧 普洱茶中要“造假”,都会怎么做? 小白应该怎么学习前端 听说生茶张在回收冰岛茶,真的假的?生茶张是做什么的?买茶的吗? JavaScript请写一个函数,它可以接收计算任意多个数值参数,并且返回所有... JS中变量后面有个问号是什么意思? 数控高频过的产品用什么型号的手磨刀头? 想买点茶带回家总听说帝泊洱溶普洱茶珍不错在哪能买到,假的多吗? 佳能G2810打印机? iphome11pro比iphone12pro屏幕更黄 iphone11pro屏幕一会黄一会白