# Lua Manual > 本篇會以 C# 重度使用者的角度去看 Lua,謹慎服用 ## 簡介 動態語言,與 C# 強型別類靜態語言不同,型別在 runtime 才決定,所以相對難在非 runtime 時發現問題。 --- ## comment 註解 | | <font color=#FF0000> Lua </font> | C# | 快捷鍵 | | -------- | -------- | -------- | -------- | | 註解 | **\-\-** | **//** | **Ctrl + /** | | 長註解 | **\-\-\[\[ 多行內容 \]\]\-\-** | **/\* \*/** | **Shift + Alt + A** | --- ## modifier 修飾詞 :::danger Lua 的存取修飾詞預設為全域 (不下 local) ::: | | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | -------- | | 全域 | **預設就是全域** | **public** | | 區域 | **local** | **private** | --- ## keyword 關鍵字 | | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | -------- | | 空值 | **nil** | **null** | | 跳脫 | **break** | **break** | --- ## \_G 全域環境變數 詳情請見 **[這裡](https://www.jianshu.com/p/7b8ae23ecd81)** * 保存 Lua 所有的 **Global Function** 與 **Global Variable** * Lua 所有的 **Global Function** 與 **Global Variable** 會自動加進 **\_G**,**Local Function** 與 **Local Variable** 則不會 * 可以透過 **KeyValuePair** 的形式在 **\_G** 存放 **Local Function** 與 **Local Variable** --- ## operator 運算子 | | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | -------- | | 不相等 | **~=** | **!=** | | 或 | **or** | **||** | | 且 | **and** | **&&** | | 非 | **not** | **!** | --- ## method 方法 :::warning 推薦使用 <font color=#FF0000> 冒號 </font> 的寫法,對比點號寫法可以少一條指令,也比較簡潔,詳情請見 [這裡](https://zhuanlan.zhihu.com/p/115159195) ::: | | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | -------- | | 點號形式 | **function** myFunc **()** <br/> &emsp; do somthing <br/> **end** | **T** myFunc **()** <br/> **{** <br/> &emsp; do somthing <br/> **}** | | 呼叫方式 | obj<font color=#FF0000> **.** </font>myFunc(<font color=#FF0000> **obj** </font>) | obj.myFunc() | | 冒號形式 | **function** myFunc **(<font color=#FF0000> self </font>)** <br/> &emsp; do somthing <br/> **end** | | | 呼叫方式 | obj<font color=#FF0000> **:** </font>myFunc() <br/> | | --- ## string 字串 | | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | -------- | | 字串 | **'abcd'**, **"abcd"**, **\[\[abcd]]**, **\[=\[abcd]=]** 以上都一樣 | **"abcd"** | | 字串拼接 | **"ab"\.\."cd"** | **"ab" + "cd"** | | 字串長度 | **#** 或 **string.len** 例:**#aa = 2** | **string.Length** | --- ## if 判斷式 | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | | **if** 略 **then** <br/> &emsp; do somthing <br/> **end** | **if** **(** 略 **)** <br/> **{** <br/> &emsp; do somthing <br/> **}** | --- ## while 迴圈 | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | | **while** 略 **do** <br/> &emsp; do somthing <br/> **end** | **while** **(** 略 **)** <br/> **{** <br/> &emsp; do somthing <br/> **}** | --- ## for 迴圈 | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | | **for i = 0, 2** 略 **do** <br/> &emsp; do somthing <br/> **end** | **for ( var i = 0; i < 2; i++ )** <br/> **{** <br/> &emsp; do somthing <br/> **}** | | **for i = 0, 3, 2** 略 **do** <br/> &emsp; do somthing <br/> **end** | **for ( var i = 0; i < 3; i += 2 )** <br/> **{** <br/> &emsp; do somthing <br/> **}** | --- ## do 迴圈 | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | | **repeat** <br/> &emsp; do somthing <br/> **until** 略 | **do** <br/> **{** <br/> &emsp; do somthing <br/> **}** <br/> **while** **(** 略 **)** | --- ## iterate 迭代 :::danger Lua 第一個 Index 為 1,不是 0 ::: | | <font color=#FF0000> Lua </font> | C# | | -------- | -------- | -------- | | 依序迭代 <br/> 從 1 開始依序尋找,直到找不到 <br/> 詳情請見 [這裡](http://huli.logdown.com/posts/198866-lua-table) | **for i, v in ipairs(t) do** <br/> &emsp; do somthing <br/> **end** | | | 無序迭代 | **for k, v in pairs(t) do** <br/> &emsp; do somthing <br/> **end** | **foreach (var kvp in t)** <br/> **{** <br/> &emsp; do somthing <br/> **}** | | 清除迭代 | **t = nil** | **t.Clear()** | --- ## function 非固定參數數量 | | Lua | C# | | ------- | ------- | ------- | | 類似概念 | **function A(...)**<br/> &emsp;print(arg[1])<br/>**end** | **public void A(params object[] args)**<br/>**{**<br/>&emsp;System.Console.WriteLine(args[0])<br/>**}** | --- ## try catch 1. [基本介紹](https://www.lua.org/pil/8.4.html) 2. **pcall** 執行的function **A** 如果有帶參數 **a, b, c** -> 執行 **pcall(A, a, b, c)** --- ## 如何將OO的概念導入lua ? * [參考文章](https://www.lua.org/pil/16.html) --- ###### tags: `Lua`