最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

舉例詳解Lua中的協(xié)同程序編程

 更新時間:2015年05月29日 10:18:24   投稿:goldensun  
這篇文章主要介紹了Lua中的協(xié)同程序編程,是Lua入門學習中的基礎(chǔ)知識,需要的朋友可以參考下

 協(xié)同程序是協(xié)同的性質(zhì),可以把兩個或更多的方法以可控制的方式執(zhí)行。隨著協(xié)同程序,在任何給定的時間,只有其協(xié)同程序運行之一,這在運行協(xié)同程序只能暫停其執(zhí)行時,明確要求暫停。

上述定義可能看起來模糊。來告訴它更清楚,假設(shè)我們有兩個方法,一個主程序方法和協(xié)同程序。當我們使用恢復(fù)功能調(diào)用協(xié)程,其開始執(zhí)行,當我們調(diào)用yield功能,暫停執(zhí)行。再次同協(xié)程可以繼續(xù)從它被暫停的另一個恢復(fù)功能調(diào)用執(zhí)行。這個過程可以繼續(xù),直到執(zhí)行了協(xié)程的結(jié)束。
協(xié)同程序可用的功能

下表列出了在Lua協(xié)同程序及其相應(yīng)的使用所有的可用功能。

2015529101326508.jpg (648×454)

 例子

讓我們看一個例子就明白了協(xié)程的概念。

復(fù)制代碼 代碼如下:
co = coroutine.create(function (value1,value2)
   local tempvar3 =10
   print("coroutine section 1", value1, value2, tempvar3)
   local tempvar1 = coroutine.yield(value1+1,value2+1)
   tempvar3 = tempvar3 + value1
   print("coroutine section 2",tempvar1 ,tempvar2, tempvar3)
   local tempvar1, tempvar2= coroutine.yield(value1+value2, value1-value2)
   tempvar3 = tempvar3 + value1
   print("coroutine section 3",tempvar1,tempvar2, tempvar3)
   return value2, "end"
end)

print("main", coroutine.resume(co, 3, 2))
print("main", coroutine.resume(co, 12,14))
print("main", coroutine.resume(co, 5, 6))
print("main", coroutine.resume(co, 10, 20))

當我們運行上面的程序,會得到下面的輸出。

復(fù)制代碼 代碼如下:
coroutine section 1 3 2 10
main true 4 3
coroutine section 2 12 nil 13
main true 5 1
coroutine section 3 5 6 16
main true 2 end
main false cannot resume dead coroutine

上面的例子是做什么?

如之前所提到的,我們使用恢復(fù)功能的動作開始,并產(chǎn)生函數(shù)來停止操作。此外,可以看到有由協(xié)程恢復(fù)功能接收多個返回值。這里將解釋上面的程序每一個步驟,使之清楚。

  •     首先,我們創(chuàng)建了一個協(xié)同程序,并把它分配給變量名合作和協(xié)同程序需要在兩個變量作為參數(shù)。
  •     當我們稱之為第一恢復(fù)功能,值3和2分別被保持在臨時變量value1和value2,直到協(xié)程的結(jié)束。
  •     為了理解這一點,我們已經(jīng)使用了tempvar3初始化為10,它被由協(xié)程的后續(xù)調(diào)用更新為13和16,因為值1被保留為3,整個協(xié)同程序的執(zhí)行。
  •     第一個coroutine.yield返回兩個值4和3 是由更新輸入?yún)?shù)3和2,yield語句得到了恢復(fù)函數(shù)。它還接收協(xié)程執(zhí)行的真/假狀態(tài)。
  •     關(guān)于協(xié)程的另一件事是如何恢復(fù)調(diào)用下一參數(shù)寫成的照顧,在上述的例子; 可以看到,coroutine.yield分配變量接收到下一次調(diào)用參數(shù),它提供做新業(yè)務(wù)與現(xiàn)有參數(shù)值之間的關(guān)系的一種強有力的方式。
  •     最后,一旦在協(xié)同程序的所有語句執(zhí)行時,后續(xù)調(diào)用將返回false,并且“不能恢復(fù)死協(xié)同程序”語句作為回應(yīng)。

另一個協(xié)程的例子

讓我們來看一個簡單的協(xié)同程序返回一個數(shù)字,從1到5 yield函數(shù)恢復(fù)功能。它創(chuàng)建協(xié)同程序,如果沒有則恢復(fù)現(xiàn)有的協(xié)程。

復(fù)制代碼 代碼如下:
function getNumber()
   local function getNumberHelper()
      co = coroutine.create(function ()
      coroutine.yield(1)
      coroutine.yield(2)
      coroutine.yield(3)
      coroutine.yield(4)
      coroutine.yield(5)
      end)
      return co
   end
   if(numberHelper) then
      status, number = coroutine.resume(numberHelper);
      if coroutine.status(numberHelper) == "dead" then
         numberHelper = getNumberHelper()
         status, number = coroutine.resume(numberHelper);
      end
      return number
   else
      numberHelper = getNumberHelper()
      status, number = coroutine.resume(numberHelper);
      return number
   end
end
for index = 1, 10 do
   print(index, getNumber())
end

當我們運行上面的程序,會得到下面的輸出。

復(fù)制代碼 代碼如下:
1 1
2 2
3 3
4 4
5 5
6 1
7 2
8 3
9 4
10 5

往往有協(xié)同程序與多道程序語言的線程的比較,但要明白,協(xié)同程序線程有類似的功能,但只有一次執(zhí)行,并不會執(zhí)行兼任。

我們控制程序的執(zhí)行順序,以滿足與提供暫時保留某些信息的需求。使用全局變量與協(xié)程,提供了協(xié)同程序更加靈活。
 

相關(guān)文章

  • Lua的table庫函數(shù)insert、remove、concat、sort詳細介紹

    Lua的table庫函數(shù)insert、remove、concat、sort詳細介紹

    這篇文章主要介紹了Lua的table庫函數(shù)insert、remove、concat、sort詳細介紹,本文分別給出了這幾個函數(shù)的使用實例,需要的朋友可以參考下
    2015-04-04
  • Lua教程(五):迭代器和泛型for

    Lua教程(五):迭代器和泛型for

    這篇文章主要介紹了Lua教程(五):迭代器和泛型for,本文講解了迭代器與Closure、泛型for的語義、 無狀態(tài)迭代器的例子、 具有復(fù)雜狀態(tài)的迭代器等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua中使用table實現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu)

    Lua中使用table實現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了Lua中使用table實現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu),本文用table為基礎(chǔ),實現(xiàn)了數(shù)組、鏈表、隊列、集合等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-09-09
  • Lua中調(diào)用C++函數(shù)示例

    Lua中調(diào)用C++函數(shù)示例

    這篇文章主要介紹了Lua中調(diào)用C++函數(shù)示例,本文給出的C++函數(shù)average()演示了如何接受多個參數(shù)且返回超過一個值,需要的朋友可以參考下
    2015-07-07
  • Lua教程(一):在C++中嵌入Lua腳本

    Lua教程(一):在C++中嵌入Lua腳本

    這篇文章主要介紹了Lua教程(一):在C++中嵌入Lua腳本,本文在MAC環(huán)境中開發(fā),同時探討了IOS項目集成Lua、Android項目集成Lua等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua極簡入門指南(一):基礎(chǔ)知識篇

    Lua極簡入門指南(一):基礎(chǔ)知識篇

    這篇文章主要介紹了Lua極簡入門指南(一):基礎(chǔ)知識篇,本文羅列了Lua的基礎(chǔ)知識,如注釋、數(shù)據(jù)類型、table、循環(huán)控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Lua的堆棧淺析

    Lua的堆棧淺析

    這篇文章主要介紹了Lua的堆棧淺析,本文參考游戲人工智能編程案例精粹中的Lua堆棧索引圖,畫出了自己的一張理解圖,需要的朋友可以參考下
    2014-09-09
  • C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例

    C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例

    這篇文章主要介紹了C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例,本文使用Lua文件作為配置文件,并寫了幾個響應(yīng)函數(shù)以便在C++中使用,需要的朋友可以參考下
    2015-07-07
  • C語言模塊回調(diào)Lua函數(shù)的兩種方法

    C語言模塊回調(diào)Lua函數(shù)的兩種方法

    這篇文章主要介紹了C語言模塊回調(diào)Lua函數(shù)的兩種方法,本文講解了C保存函數(shù)對象、C訪問Lua全局環(huán)境兩種方法,需要的朋友可以參考下
    2015-04-04
  • 舉例講解Lua中的Table數(shù)據(jù)結(jié)構(gòu)

    舉例講解Lua中的Table數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了舉例講解Lua中的Table數(shù)據(jù)結(jié)構(gòu),說明都融入到了注釋中,需要的朋友可以參考下
    2015-07-07

最新評論

招远市| 崇礼县| 农安县| 泸西县| 惠东县| 宁化县| 黄浦区| 特克斯县| 梅河口市| 陆川县| 靖宇县| 读书| 寿阳县| 文登市| 榆树市| 德阳市| 都安| 龙海市| 阿克陶县| 沂南县| 厦门市| 宁安市| 红桥区| 交城县| 留坝县| 太康县| 和平区| 博客| 仙居县| 华亭县| 肥乡县| 临洮县| 巴青县| 东乡| 屏东县| 洪江市| 湄潭县| 河间市| 肇州县| 铅山县| 淅川县|