亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua中的協同程序之resume-yield間的數據返回研究

2024-07-21 23:04:02
字體:
來源:轉載
供稿:網友

這次要介紹幾個其實很簡單,但是一定要小心的返回值規則。

1.resume的參數

resume函數除了第一個參數是協同程序外,還能繼續傳其他參數,如下代碼:

復制代碼 代碼如下:

    local co = coroutine.create(function(name)
        print(name);
    end);
    coroutine.resume(co, "resume param");

 

resume第二個參數為“resume parame”,這個參數將會傳遞給協同程序的函數。
輸出結果如下:

復制代碼 代碼如下:

[LUA-print] resume param

這很簡單,對吧,記住這個規則了,接下來不要混亂了。

 

2.resume函數的第二個返回值

還記得resume函數的兩個返回值嗎?一個代表協同程序是否正確執行,一個代表錯誤信息。

那,如果協同程序正確執行,錯誤信息這個返回值自然就是nil了。

然后,這里還有一個規則,那就是yield函數的參數可以傳遞到resume的第二個返回值里。
 
如下代碼:

復制代碼 代碼如下:

    local co = coroutine.create(function(name)
        print(name);
        coroutine.yield("yield param");
    end);
    local result, msg = coroutine.resume(co, "resume param");
    print("msg:" .. msg);

輸出結果如下:
復制代碼 代碼如下:

[LUA-print] resume param
[LUA-print] msg:yield param

這次我們只是加了一句yield的調用,同時yield函數我們傳遞了一個參數進去。
而這個函數將作為resume的第二個返回值,前提是,resume函數的第一個返回值是true。
 
怎么樣?是不是開始有點混亂了?
沒關系,接下來更加混亂。

 

3.yield的返回值

這次輪到yield的返回值了,來看看下面的代碼:

復制代碼 代碼如下:

    local co = coroutine.create(function(name)
        for i = 1, 2, 1 do
            print(name);
            print("co:" .. coroutine.yield("yield param"));
        end
    end);
    for i = 1, 2, 1 do
        print("=========第" .. i .. "次執行:")
        local result, msg = coroutine.resume(co, "resume param");
        print("msg:" .. msg);
    end

 

這次的協同程序會執行一個for循環,而我們也會調用兩次resume函數,輸出結果如下:

復制代碼 代碼如下:

[LUA-print] =========第1次執行:
[LUA-print] resume param
[LUA-print] msg:yield param
[LUA-print] =========第2次執行:
[LUA-print] co:resume param
[LUA-print] resume param
[LUA-print] msg:yield param

第一次執行的時候,協同程序第一次被掛起,所以yield的返回要等待第二次resume被調用時才能得到。

 

于是,第二次調用resume時,首先就得到了上一次yield的返回值了,這個返回值正是resume的第二個參數。
 
沒錯,resume的第二個返回值是yield的參數,而yield的返回值,是resume的第二個參數。

再簡單一些,resume的返回值是yield的參數,yield的返回值是resume的參數。
同時,resume的第二個參數也能傳遞給協同程序的函數。
 
怎么樣?稍微有點點混亂了吧?

沒關系喇,更混亂的情況還會接著發生的,呵呵。(小若:呵呵你個頭啊,我走了)

4.協同程序結束,主函數的返回值

這最后一種情況了,那就是協同程序的函數返回值,沒錯,它也能有返回值。
先看代碼:

復制代碼 代碼如下:

    local co = coroutine.create(function(name)
        for i = 1, 2, 1 do
            print(name);
            print("co:" .. coroutine.yield("yield param"));
        end
        return "協同程序函數結束喇!"
    end);
    for i = 1, 3, 1 do
        print("=========第" .. i .. "次執行:")
        local result, msg = coroutine.resume(co, "resume param");
        print("msg:" .. msg);
    end

 

我在協同程序函數的最后加了一個返回值,僅僅是一個字符串。

而resume的調用我增加到了3次,這是因為協同程序的for循環會執行兩次,也就是會調用yield兩次。

所以,需要第三次執行resume函數時,第二次yield才能得到返回。
 
輸出結果如下:

復制代碼 代碼如下:

[LUA-print] =========第1次執行:
[LUA-print] resume param
[LUA-print] msg:yield param
[LUA-print] =========第2次執行:
[LUA-print] co:resume param
[LUA-print] resume param
[LUA-print] msg:yield param
[LUA-print] =========第3次執行:
[LUA-print] co:resume param
[LUA-print] msg:協同程序函數結束喇!

前兩次的執行結果沒變,第三次就有點特別。

 

第三次執行resume時,首先就得到了第二次yield的返回,輸出“co:resume param”。

注意一下,這里是不會繼續執行print(name);這句代碼的,也就是說,整個協同程序函數的for循環是不會被執行的。

這里僅僅是第二次的yield函數返回了結果,這個可不能理解錯了。
 
最后,協同程序函數返回一個字符串,這個字符串做成為resume函數的第二個返回值。
是的,當協同程序執行完畢時,resume的第二個返回值就不再是yield的參數了。

5.結束

好了,這就是我今天不小心掃了幾眼后,就不得不仔細研究的地方了。

雖然暫時還沒了解這些規則的實際應用,但,這必須得記錄下來,因為我很快就會混亂,到時候還得回頭看這篇文章吧~
 
好吧,已經9點了…美好的周五晚上T_T

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区日韩在线| 浅井舞香一区二区| 欧美日韩国产激情| 国产精品福利网站| 欧美在线视频一区| 孩xxxx性bbbb欧美| 一本大道久久加勒比香蕉| 国产日产欧美精品| 成人福利网站在线观看| 欧美精品一区二区免费| 川上优av一区二区线观看| 91免费电影网站| y97精品国产97久久久久久| 日韩av免费在线观看| 黑人精品xxx一区| 精品国产福利视频| 精品欧美一区二区三区| 亚洲国产精品一区二区久| 亚洲人成自拍网站| 午夜精品一区二区三区在线视频| 久久影院资源网| 亚洲va久久久噜噜噜久久天堂| 国产精品免费视频久久久| 国产精品免费久久久| 亚洲第一二三四五区| 欧美人交a欧美精品| 国产一区二区三区在线播放免费观看| 成人免费看黄网站| 国产精品视频xxxx| 欧美日韩成人在线播放| 国产z一区二区三区| 国产精品日韩欧美| 久久成人av网站| 最新69国产成人精品视频免费| 欧美日在线观看| 国产精品自拍偷拍| 91av在线精品| 91精品国产91| 亚洲天堂av在线免费观看| 成人写真福利网| 欧美成人剧情片在线观看| 中文在线不卡视频| 久久国产精品影片| 国产精品入口日韩视频大尺度| 欧美日韩中国免费专区在线看| 亚洲欧美第一页| 懂色av中文一区二区三区天美| 国产精品精品久久久| 亚洲老头同性xxxxx| 亚洲国产精品久久91精品| 9.1国产丝袜在线观看| 国产一区二区三区在线看| 国产日韩欧美夫妻视频在线观看| 97av在线播放| 97香蕉超级碰碰久久免费的优势| 欧美中文在线观看| 欧美怡春院一区二区三区| 亚洲精品久久久久中文字幕二区| 91免费的视频在线播放| 欧美日韩亚洲激情| 欧美午夜片在线免费观看| 日本一区二区不卡| 欧美理论片在线观看| 亚洲欧美日韩成人| 精品国产一区二区三区久久狼黑人| 亚洲影视中文字幕| 激情久久av一区av二区av三区| 日韩精品免费在线观看| 高清视频欧美一级| 亚洲夜晚福利在线观看| 国产精品中文字幕久久久| 日韩视频精品在线| 精品日韩美女的视频高清| 欧美在线视频一二三| 久久久爽爽爽美女图片| 日韩电影免费在线观看| 欧美插天视频在线播放| 久久精品国产一区二区电影| 91麻豆桃色免费看| 欧美性资源免费| 九九热精品视频国产| 欧美高清视频在线观看| 色樱桃影院亚洲精品影院| 国产91精品久| 亚洲欧美日韩另类| 海角国产乱辈乱精品视频| 免费91在线视频| 黄色一区二区在线| 中文字幕一精品亚洲无线一区| 亚洲在线视频观看| 日韩欧美精品网站| 久久视频这里只有精品| 欧美精品videossex88| 国产综合福利在线| 91在线高清免费观看| 97在线视频免费观看| 色偷偷88888欧美精品久久久| 97视频在线观看免费高清完整版在线观看| 国产精品永久免费在线| 国产成人+综合亚洲+天堂| 97涩涩爰在线观看亚洲| 国产成人一区二区三区电影| 欧美精品videosex极品1| 精品视频一区在线视频| 日韩欧美在线看| 91精品成人久久| 久久精品成人动漫| 黑人精品xxx一区| 国产成人一区二区三区小说| 日产精品99久久久久久| 亚洲乱码av中文一区二区| 97在线看免费观看视频在线观看| 亚洲国产99精品国自产| 国产精品福利网| 国产一区二区三区免费视频| 91亚洲精华国产精华| 欧美黑人国产人伦爽爽爽| 久久久久久久久久av| 日韩在线观看免费av| 欧美性视频精品| 久久中文字幕视频| 国产精品久久久久久久久久三级| 俺去亚洲欧洲欧美日韩| 国产精品一区=区| 国产视频观看一区| xxxx性欧美| 欧美一级淫片aaaaaaa视频| 2019中文字幕免费视频| 国产69精品99久久久久久宅男| 亚洲直播在线一区| 一区二区三区在线播放欧美| 亚洲深夜福利在线| 亚洲第一精品夜夜躁人人爽| 欧美激情精品久久久久久变态| 色哟哟亚洲精品一区二区| 日韩在线国产精品| 国产精品欧美激情| 伊人亚洲福利一区二区三区| 亚洲欧美中文日韩v在线观看| 68精品久久久久久欧美| 最近中文字幕mv在线一区二区三区四区| 性日韩欧美在线视频| 在线精品国产成人综合| 欧美日本黄视频| 成人中文字幕+乱码+中文字幕| 91视频国产高清| 精品久久久久久久中文字幕| 国产精品久久久久久久久免费看| 亲子乱一区二区三区电影| 亚洲精品影视在线观看| 亚洲深夜福利在线| 在线播放日韩专区| 亚洲欧美中文在线视频| 亚洲国产精品美女| 亚洲欧美在线免费观看| 久久久久久久999精品视频| 国产日韩欧美夫妻视频在线观看| www.欧美视频| 国产精品视频999| 亚洲福利在线播放| 日本一区二区在线播放| 欧美日韩国产精品一区二区三区四区| 国产中文字幕亚洲| 538国产精品一区二区免费视频|