lua學習小記(1)

來源:互聯網
上載者:User

        決定學一門動態指令碼語言,感受一下不受拘的coding,發現比較流行的又不是只能用來寫網頁的有python,lua,ruby等。lua兼具運行效率高,表達能力強的優點,成了我的首選。更何況“月亮”聽起來要比“蟒蛇”和“紅寶石”文藝多了。

       這是第一篇,但我不知道會不會寫第二篇。題目括弧裡的數字是1,因為lua裡的數組下標習慣上是從1開始的,當然從-1234開始也沒有錯,但不建議在一個團隊中使用,尤其團隊成員有暴力傾向的話。

       原以為lua會比較好學一點,因為它小巧。現在知道錯了,lua不是那麼易學,因為小巧。經驗告訴我們,由一組簡單的規則衍生出複雜變化的事物,都不是好學的,儘管他們學起來都很有意思。

print"Hello world!"


        這行代碼是lua的hello world程式,對比java的hello world就會感到lua的文法簡潔。下面的代碼也是可以的:

local say = print<br />say"Hello world!"

        效果一樣。可以看出lua中的函數也是第一類值,可以像變數一樣賦值,傳作參數。但函數不是變數,而是匿名對象,isay和print都是對函數的引用。

local function say(s)<br /> print(s)<br />end</p><p>say"Hello world"
        不要被上面那段的文法迷惑了,認為是個函式宣告——準確地說,是把匿名函數的引用賦值給say,上述的文法只是個文法糖,解譯器會被它翻譯成如下代碼:

local say<br />say = function(s)<br /><as before>
        起初不喜歡這個文法糖,後來發現在處理遞迴時,這個文法糖還是很簡潔的,此處不表。

        lua的設計目標之一在於更方便地表示資料,所以,表無處不在。

t = {1, 2, 3, a = 4, b = 5}<br />for k, v in pairs(t) do<br /> print(k, "=", v)<br />end
        第一行是表的初始設定式,表也是匿名對象,t是它的引用。接著的迴圈遍曆了表中的元素。可以通過t[1]訪問到值1,也可通過t.a訪問到值4——這個表一部分是數組,一部分是字典。

        其實程式的最外層也是一個表,它的引用是_G,t也是_G的一個鍵。

        有個與表相關的語言特點,lua可以多值賦值。這可以帶來一些方便。

        比如較換兩個數的值,普通程式員這麼寫:

void swap(int *const a, int *const b)<br />{<br /> int t = *a;<br /> *a = *b;<br /> *b = t;<br />}
        文藝程式員:

void swap(int *const a, int *const b)<br />{<br /> *a ^= *b;<br /> *b ^= *a;<br /> *a ^= *b;<br />}
        lua程式員:

a, b = b, a

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.