• LUA速成教程


    說明:

    1.該教程適合對編程有一定了解的人員。

    2.該教程在WINDOWS下實驗。

    切入正題,

    1.首先下載Notepad++,工欲善其事,必先利其器,然後安裝NotePad++的插件NppExec。如果不甚了解,可以度娘或者谷歌。

    接著下載Lua,在環境變量中加入LUA的路徑。如果不甚了解也請度娘。

    2.配置NppExec,如下圖,對幾個重要的屬性打勾,並將Direct Excecute Previous的快捷鍵改為F9,因為更方便使用,可以使用“設置”->“管理快捷鍵”->"Plugin commonds"進行更改。

    然後按F6,彈出下圖,進行配置自動運行腳本的命令:

    因為我安裝的是52版本的LUA,所以我使用LUA52,如果你的版本不同,這個命令行就有可能不同。

    然後點SAVE進行保存。

    3.LUA簡單說明,

    1).LUA的語句塊使用 end 結束,

    2).使用 逗號 , 進行分隔

    3).只有函數聲明和函數調用參數才使用小括號 (),然後地方均不用括號

    4)變量是無類型的,即為任何為類型。

    好了,可以寫一個簡單的1+... + 100 的小程序了:

    sum = 0
    for i=0,100 do
        sum = sum + i
    end
    
    print ("sum = ",sum)

    小小分析一下,for 使用 do 開始,end結束,i=0,100,使用逗號進行分隔,從0開始,100結束,函數print支持多參數。for 還支持步數,看下面的程序:

    for i=0,10,2 do
        print (i)
    end

    試驗一下,發現,會打印 0,2,4,8,10,因為是以2為步數,即每次i+2

    循環還有 while do ... end, repeat ... until ...,注意前面說的,只有函數才用括號,所以until , while 等是不用括號的。

    4. 函數。函數太好玩了,可以接收多參數,可以返回多參數。我們寫一個加法函數:

    function add (a,b)
        return a,b,a+b
    end

    再調用

    print (add(1,2))

    我想結果你已經看到了。

    5.最好用的結構體:table,使用非常簡單:變量名={},如果大括號內為內,這個表就為空。注意前面說的,使用逗號進行分隔。

    來看一下代碼:

    
    
    g_id = 1
    shape = {
        name="what",
        id=1,
        
        rect = { x=0, y=0, w=100, h=100},
        font = { name="PMingLiU", size=11 }
    }
    
    
    function GenerateShape ()
        local _s2 = shape
        g_id = g_id + 1
        _s2.id = g_id
        _s2.name="good".. g_id
        return _s2
    end
    
    function PrintShape (s)
        print (s.name, s.id, s.rect.x, s.font.name)
    end
    
    PrintShape (shape)
    s2 = GenerateShape ()
    PrintShape (s2)
    PrintShape (shape)
    
    s3 = GenerateShape ();
    PrintShape (s2)
    PrintShape (s3)
    PrintShape (shape)
    
    

    我定義了一個 GenerateShape (),用於自動產生一個shape,它的ID自動加1,使用一個全局變量 shape,它有默認值。當我們打印結果的時候,很自然的發現,他們全部一樣了,於是我們發現,LUA是不支持C/C++的傳值的,全部是引用。於是又改進了下:

    g_id = 1
    shape = {
        name="what",
        id=1,
        
        rect = { x=0, y=0, w=100, h=100},
        font = { name="PMingLiU", size=11 }
    }
    
    
    function GenerateShape ()
        local _s2 = {
            name="what",
            id=1,
            
            rect = { x=0, y=0, w=100, h=100},
            font = { name="PMingLiU", size=11 }
        }
        
        return _s2
    end
    
    
    
    function InitShape (s,name)
        g_id = g_id + 1
        s.id = g_id
        s.name=name
    end
    
    function PrintShape (s)
        print (s.name, s.id, s.rect.x, s.font.name)
    end
    
    PrintShape (shape)
    s2 = GenerateShape ()
    InitShape (s2,"s2")
    PrintShape (s2)
    PrintShape (shape)
    
    s3 = GenerateShape ();
    InitShape (s3, "s3")
    PrintShape (s2)
    PrintShape (s3)
    PrintShape (shape)

    很顯然我們已經可以得到正確的變量了。

    另外要注意的就是,table相當於一個字典,看下面的函數名對應函數,注意,函數也可以當作是一個變量:

    function add(a,b)
        return a+b
    end
    
    function minus (a,b)
        return a-b
    end
    
    funs = {}
    
    funs [add] = "add"
    funs [minus] = "minus"
    
    for n,v in pairs (funs) do
        print (n,v)
    end

    在for語句中,n是key, v是value,打印結果是很一目瞭然的。

    關於一點小技巧,就是如果函數多個返回值,可能我們不需要前面幾個值(後面不需要,可以不填,會自動忽略),可以使用“_"進行一下佔位,如:

    function add (a,b)
        return a,b,a+b
    end
    
    _,_,sum = add(1,2)
    
    print (sum)

    好了,寫到這裡了,不寫了。想要深入,就可以學習標準庫:string, io, math, 等,以及與C語言如何交互。

    这里有一篇相当好的总结,:

    http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html

  • 相关阅读:
    ssh_jar包选择
    去js校验
    CSS
    html(HyperText Markup Language)--超文本标记语言
    Java compiler level does not match解决方法
    linux上面是否有安装redis,redis启动
    mybatis 详解(九)------ 一级缓存、二级缓存
    mybatis 详解(八)------ 懒加载
    mybatis 详解(六)------通过mapper接口加载映射文件
    mybatis 详解(七)------一对一、一对多、多对多
  • 原文地址:https://www.cnblogs.com/lin1270/p/3601824.html
Copyright © 2020-2023  润新知