【Programming in Lua1-7章】讀書筆記
很多細節的小點為了防止自己遺忘,也方便以後查詢,順帶回顧一下,分tips記錄在這裡。較為常識的Lua語法在這裡就不在贅述了。
- Lua返回值可以是多個,但是在一些特定情況下只有一個。如用小括號強制返回一個,函式返回值在賦值語句中不是最後一個:
x,y = foo2(), 20
-- x='a', y=20 foo2返回兩個值,但是此時只能返回一個
- Lua 中類似 return g(...)這種格式的呼叫是尾呼叫。但是 g 和 g 的引數都可以是複雜表示式,因為 Lua 會在呼叫之前計算表示式的值。例如下面的呼叫是尾呼叫: return x[i].foo(x[j] + a*b, i + j)
- 迭代器是一種支援指標型別的結構,它可以遍歷集合的每一個元素。說白了目前的迭代器就是利用閉包的upvalue來儲存值,實現迴圈呼叫。
-
for <var-list> in <exp-list> do <body> end
<var-list>是一個或多個以逗號分割的變數名列表,<exp-list>是一個或多個以逗號分割的表示式列表,通常情況下 exp-list 只有一個值:迭代工廠的呼叫。
首先,初始化,計算 in 後面表示式的值,表示式應該返回範性 for 需要的三個值:迭代函式,狀態常量和控制變數;與多值賦值一樣,如果表示式返回的結果個數不足三個會自動用 nil 補足,多出部分會被忽略。
第二,將狀態常量和控制變數作為引數呼叫迭代函式(注意:對於 for 結構來說,
狀態常量沒有用處,僅僅在初始化時獲取他的值並傳遞給迭代函式)。
第三,將迭代函式返回的值賦給變數列表。
第四,如果返回的第一個值為 nil 迴圈結束,否則執行迴圈體。 第五,回到第二步再次呼叫迭代函式。 更精確的來說:
for var_1, ..., var_n in explist do block end
等價於
do local _f, _s, _var = explist while true do local var_1, ... , var_n = _f(_s, _var)
_var = var_1 if _var == nil then break end
block end
end
相關文章
- 【讀書筆記】The Swift Programming Language (Swift 4.0.3)筆記Swift
- Mac OS X Programming讀書筆記4 - WindowsMac筆記Windows
- The art of multipropcessor programming 讀書筆記-硬體基礎2筆記
- Mac OS X Programming讀書筆記5 - ControlsMac筆記
- 《APUE》第7章 程式環境-讀書筆記筆記
- 讀書筆記——《軟體工程》第10~12章筆記軟體工程
- 讀書筆記...筆記
- 讀書筆記筆記
- 《Effective C++》第5章 實現-讀書筆記C++筆記
- The art of multipropcessor programming 讀書筆記-3. 自旋鎖與爭用(2)筆記
- 《讀書與做人》讀書筆記筆記
- 《Java8實戰》-讀書筆記第二章Java筆記
- 構建之法的八、九、十章讀書筆記筆記
- C++ Primer 讀書筆記 - 第一章C++筆記
- CCNA中文讀書筆記第1章:Internetworking(轉)筆記
- 讀書筆記:深入解析oracle-第5章 記憶體管理筆記Oracle記憶體
- Cucumber讀書筆記筆記
- 散文讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- CoreJava讀書筆記-------Java筆記
- flask讀書筆記Flask筆記
- Vue讀書筆記Vue筆記
- MONGODB 讀書筆記MongoDB筆記
- Qt讀書筆記QT筆記
- Node讀書筆記筆記
- SAP讀書筆記筆記
- YII讀書筆記筆記
- iptables 讀書筆記筆記
- Makefile 讀書筆記筆記
- mysql讀書筆記MySql筆記
- 鎖讀書筆記筆記
- dataguard讀書筆記筆記
- 讀書筆記3筆記
- 讀書筆記2筆記
- postgres 讀書筆記筆記
- 讀書筆記之《現代軟體工程》第5.5章、第6章、第7章筆記軟體工程
- 《C專家程式設計》讀書筆記(1-3章)程式設計筆記
- 【演算法圖解】讀書筆記:第3章 遞迴演算法圖解筆記遞迴