Lua語言進階


0x01 Lua中什么值為假沮趣?

    nil
    false

0x02 語法舉例

  1. 當在一個數(shù)字后面寫 .. 時肚吏,必須加上空格以防止被解釋出錯烘浦。
  2. lua會自動在string 和numbers之間自動運行類型轉(zhuǎn)換槽华,當一個字符串使用算術(shù)操作符時忙灼,string就會被轉(zhuǎn)化成數(shù)字寞酿。
    print("10"+2)  
        12.0
    print(11..12)  
        malformed number near '11..12'
    print(11 .. 12)
        1112
  1. 默認索引從1開始家夺,默認索引優(yōu)先級大于[1]; ["a"]索引優(yōu)先級大于a。
1
    local value = {"index", index="index", [1]=1}
    print(value[value[1]])
    
    Answer:
    index

2
    local a = 1  
    local b = "1"  
    local t = {a=1, ["a"]=2, [a]=3}  
    print(t.a, t["a"], t[t.a], t.b, t[b])  
    
    Answer:
    2   2   nil nil nil

3.
    local tmp = {["1"]="11","22",[3]="33","44"}
    for i,v in ipairs(tmp) do
        print(i,v)
    end
    
    Answer:
        1   22
        2   44
        3   33

4.
    local tmp = {
        ["1"] = "11",
        "22",
        [3] = "33",
        "44",
        "55"
    }  
    for i,v in ipairs(tmp) do
        print(i,v)
    end
    
    Answer:
        1   22
        2   44
        3   55
  1. Lua 語言中字符串可以使用以下三種方式來表示:單引號間的一串字符伐弹;雙引號間的一串字符拉馋;[[和]]間的一串字符。
    local stringtable = [[  
        local a = 1  
        print(a)  
    ]]  
    print(stringtable)  
    
    Answer:
        local a = 1
        print(a)
  1. 多返回值如果不接收惨好,則放棄煌茴。
    function f123() return 1,2,3 end
    function f456() return 4,5,6 end
    print(f123(),f456())
    print(f456(),f123())
        
        Answer:
            1   4   5   6
            4   1   2   3

0x03 對下面幾段代碼進行優(yōu)化,并簡述優(yōu)化的原理日川。

https://wuzhiwei.net/lua_performance/
https://www.cnblogs.com/YYRise/p/7082637.html

1
    for _, v1 in ipairs(a) do
        for_, v2 in ipairs(b) do
            local x = math.sin(v1) * math.sin(v2)
        end
    end

優(yōu)化后
使用全局變量蔓腐,Lua預(yù)編譯在生成的指令,需要添加獲取類似以下代碼:
    GETGLOBAL 0 0 ; a
    GETGLOBAL 1 1 ; b
    ADD 0 0 1
    SETGLOBAL 0 0 ; a
Lua預(yù)編譯能夠在寄存器存儲剩余的局部變量龄句,結(jié)果在Lua中訪問局部變量非郴芈郏快散罕。

    local tsin = math.sin
    for _, v1 in ipairs(a) do
        for_, v2 in ipairs(b) do
            local x = tsin(v1) * tsin(v2)
        end
    end
2
    for i = 1, 2000000 do 
        local a = {}
        a[1] = 1; a[2] = 2; a[3] = 3
    end
    
優(yōu)化后
    通過給出新表合適的大小,這很容易避免那些初始的再哈希傀蓉。
    for i = 1, 200000 do
        local a = {true, true, true}
        a[1] = 1; a[2] = 2; a[3] = 3
    end
3
    local s = ""
    for i = 1, i < 300000 do 
        s = s .. 'a'
    end
    
優(yōu)化后
    在大字符串連接中欧漱,我們應(yīng)避免..。應(yīng)用table來模擬buffer葬燎,然后concat得到最終字符串误甚。
    local s = ''
    local t = {}
    for i = 1,300000 do
        t[#t + 1] = 'a'
    end
    s = table.concat( t, '')
    b = os.clock()

0x04 編寫一個函數(shù),深度clone一個傳入的lua對象谱净。

https://2013.mutoo.im/2015/10/deepclone-in-lua.html

function deepCopy(object)
    local lookup_table = {}
    local function _copy(object)
        if type(object) ~= "table" then
            return object
        elseif lookup_table[object] then
            return lookup_table[object]
        end

        local new_table = {}
        lookup_table[object] = new_table
        for key, value in pairs(object) do
            new_table[_copy(key)] = _copy(value)
        end
        return setmetatable(new_table, getmetatable(object))
    end

    return _copy(object)
end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末靶草,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岳遥,更是在濱河造成了極大的恐慌奕翔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浩蓉,死亡現(xiàn)場離奇詭異派继,居然都是意外死亡,警方通過查閱死者的電腦和手機捻艳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門驾窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人认轨,你說我怎么就攤上這事绅络。” “怎么了嘁字?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵恩急,是天一觀的道長。 經(jīng)常有香客問我纪蜒,道長衷恭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任纯续,我火速辦了婚禮随珠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猬错。我一直安慰自己窗看,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布倦炒。 她就那樣靜靜地躺著显沈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪析校。 梳的紋絲不亂的頭發(fā)上构罗,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天铜涉,我揣著相機與錄音,去河邊找鬼遂唧。 笑死芙代,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盖彭。 我是一名探鬼主播纹烹,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼召边!你這毒婦竟也來了铺呵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤隧熙,失蹤者是張志新(化名)和其女友劉穎片挂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贞盯,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡音念,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躏敢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闷愤。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖件余,靈堂內(nèi)的尸體忽然破棺而出讥脐,到底是詐尸還是另有隱情,我是刑警寧澤啼器,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布旬渠,位于F島的核電站,受9級特大地震影響镀首,放射性物質(zhì)發(fā)生泄漏坟漱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一更哄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腥寇,春花似錦成翩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掂摔,卻和暖如春术羔,著一層夾襖步出監(jiān)牢的瞬間赢赊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工级历, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留释移,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓寥殖,卻偏偏與公主長得像玩讳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嚼贡,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容