【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 art of multipropcessor programming 讀書筆記-硬體基礎2筆記
- The art of multipropcessor programming 讀書筆記-3. 自旋鎖與爭用(2)筆記
- 讀書筆記筆記
- 《讀書與做人》讀書筆記筆記
- 「Linux」鳥叔私房菜第五章讀書筆記Linux筆記
- 《Java8實戰》-讀書筆記第二章Java筆記
- webpackDemo讀書筆記Web筆記
- Vue讀書筆記Vue筆記
- 散文讀書筆記筆記
- Cucumber讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- postgres 讀書筆記筆記
- 讀書筆記2筆記
- 讀書筆記3筆記
- 【演算法圖解】讀書筆記:第3章 遞迴演算法圖解筆記遞迴
- 《C++ Primer》讀書筆記(第一章 開始)C++筆記
- 《C專家程式設計》讀書筆記(1-3章)程式設計筆記
- 效能之巔讀書筆記--第一章緒論筆記
- js高程讀書筆記JS筆記
- 《論語》讀書筆記筆記
- 《重構》讀書筆記筆記
- PMBook讀書筆記(一)筆記
- 《Java8實戰》-讀書筆記第一章(01)Java筆記
- 《高效能javascript》讀書筆記-第二章 資料存取JavaScript筆記
- 《Java8實戰》-讀書筆記第一章(02)Java筆記
- Programming Abstractions in C閱讀筆記:p331-p337筆記
- [讀書筆記]裝置驅動程式簡介(第一章)筆記
- 程式設計師修煉之道——第一章讀書筆記程式設計師筆記
- java併發變成實戰讀書筆記(1,2章節)Java筆記
- JMeter實戰-全棧效能測試第3、4章讀書筆記JMeter全棧筆記
- JavaScript 高階程式設計 第三章 讀書筆記(1)JavaScript程式設計筆記
- 《如何有效閱讀一本書》讀書筆記筆記
- 《將心注入》讀書筆記筆記
- Raft論文讀書筆記Raft筆記
- 讀書筆記-沒有空白筆記
- JVM讀書筆記之OOMJVM筆記OOM
- swift語法-讀書筆記Swift筆記
- 【GO】《GO HANDBOOK》讀書筆記Go筆記