Luaノート

7237 ワード

Luaノート


ダウンロード


公式サイトのダウンロード:lua公式サイトのアドレスはソースコードをダウンロードします.解凍インストール:
tar zxvf lua-5.2.1.tar.gz

次に、次のMakefileファイルを変更し、インストール先を変更します.
#      ,   bin ,include lib       
INATALL_TOP=/usr/local/lua

その後makeを行いますが、ヒントエラーがあり、ヒントにプラットフォームのパラメータが付いていないことがわかります.この場合、ヒントに従ったプラットフォーム名をmakeの後に付けるといいです.
make linux
make install  

スクリプトの実行


これでインストールして、最初のhello worldを始めましょう
cd /usr/local/lua/bin
./lua
print 'hello world'

出力結果が見えたでしょう.実はluaスクリプトを実行するには3つの方法があります.
1つ目は、上記の例で、端末のlua binディレクトリに入力します./lua、コンソールに入ってlua文を実行します.コンソールに入る標識は前に>があります
2つ目は、.luaという接尾辞を持つ個別のスクリプトファイルを実行することです.
touch my.lua
-- lua        - 
print 'hello world'  

そしてbinディレクトリでこのファイルを実行します
./lua my.lua  

結果も見たでしょう
3つ目の方法luaはコンパイルをサポートしています.プログラムのソースコードを他の人に見せたくない場合は、コンパイルしてから実行することができます.binディレクトリの下に実行可能なファイルが2つあることに気づくべきでしょう.それぞれlualuacです.
./luac my.lua  

これでコンパイルが完了し、現在のディレクトリにluac.outファイルが作成されます.これがコンパイルファイルです.
./lua luac.out  

これでいいです.でもこのluac.outはデフォルトのファイル名なので、複数のコンパイルファイルが生成されると前の1つが上書きされ、-h後にパラメータ-oがコンパイルファイルの名前をカスタマイズできることがわかります.
構文構造は/usr/local/lua/bin/luac [options] [filenames]なので
./luac -o my.myout my.lua  

これでOK

開発ツール


ここで私が使っている开発ツールを补充します:sublime text 3はとても良くて、具体的な配置は以下の通りです:メニュー>Build System>luaがなければNew Build Systemを选びます..次に、プロファイルがポップアップされ、次のように変更されます.
{  
"cmd": ["/usr/local/bin/lua", "$file"],  
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",  
"selector": "source.lua"  
}

cmdの後ろの配列の最初のパラメータはあなたのluaがプログラムの経路を実行するので、その他は変わらないでOK配置し終わって、やはりメニュー》TOOLS>Build System>luaで良いです
結果を実行する方法はcmd+bです
次にvimモードを設定します:Preferences=>Settings User=>次に次のコードをコピーして貼り付け、保存し、escを押すとvimモードに入ることができます.
{
"ignored_packages": []
}  

LUAのコメント方法


luaの注釈は特に、2つの-からなる--です.
--this is a description

複数行注釈は--[[...]]であり、--から始まり、]]に止まり、多層ネスト可能であり、5.1バージョン以上では、2つの中括弧にいくつかの=を加えることができるが、終端数が一致しなければならない.例えば、
--[[
    this is a description
]]
and...
--[==[
    one 
    one
    [===[
        two
        two
    ]===]
    [[three]]
]==]  

勝手に書く.

LUAの簡単な構文


グローバル変数の定義
variable = 100

ローカル変数
local variable = 'aaa'  

関数の定義
function aaa()
....
end
--   
aaa()

かんすうパラメータ
function max(a,b)
    if a>b then
        return a
    else
        return b
    end
end

forサイクル
for    ,   [,  ] do
....
end 

for i=1,100,2 do
    print(1)
end

config = {}  --      
       ,           
config = {name='user1',sex='man'}  

            :
config.age = 30
config["age"] = 30

遍歴表
for key,value in pairs(config) do
    print(key,value)
end

はいれつ
定義方法とテーブルの類似
arr = {}  --       
arr = {1,2,3,4,5,6,7}
arr = {1,2,3,['key']='hello',4,5}

注意luaの配列は下付き文字が1から始まり、その長さを計算すると、返される長さは下付き文字が連続デフォルトの下付き文字の数にすぎません.
local arr = {[6]='hello',[7]='hello',[8]='hello',[9]='hello',[10]='hello',[11]='hello',1,4}
print(#arr)    --    2  

具体的にどのように正確な長さを返して、まだ研究して、指導を歓迎します
LUAオブジェクト向けプログラミング
オブジェクト向けプログラミングというのは、lua自体がオブジェクトタイプをサポートしていないからです.luaではすべて変数です.javascriptのすべてがオブジェクトであるのと同じです.しかし、luaをいくつかのプログラミングテクニックでオブジェクト向けに書くことで、「見た目」をオブジェクト向けにすることができます.
インスタンス化
2つの方法があります.1つ目は、テーブルのレプリケーション方法です.
People = {}  --       ,  “ “

--         :

People.sayHi = function() 
    print('hello')

end
--      :
--[[
function People.syaHi()
    print('hello')
end
]]

--           ,    “   “
function clone(tab)
    --           
    local ins = {}
    for k,v in pairs(tab) do
        ins[k] = v
    end
end

--     
local person = clone(People)
person.sayHi()

これでクラスのインスタンス化と呼び出しを簡単にシミュレートしますが、初期化したらパラメータを渡すにはどうすればいいですか?私たちは改善しています.
People = {}
People.sayHi = function(ins)
    print('hello '..ins.name)  -- ..           
end

function clone(tab)
    local ins = {}
    for k,v in pairs(tab) do
        ins[k] = v
    end
end

People.new = function(name) {
    local self = clone(People)
    self.name = name
    return self
}

local person = People.new('xiaoming')  
person.sayHi(person)

しかし、このような書き方も違和感があり、luaには便利な書き方があり、上のperson.sayHi(pserson)
person:sayHi()  

継承
luaの継承の仕方とインスタンス化の差は多くない
--             
People = {}  
--              , “   ”     
People.say = function(ins)
    print('hello'..ins.name)
end
People.new = function(name) --      
    local ins = clone(People)
    ins.name = name
    return ins
end
function clone(tab)
    local ins = {}
    for k,v in pairs(tab) do
        ins[k] = v
    end
    return ins
end

--             Man   People
Man = {}
Man.new = function(name)
    local ins = {}
    --    People
    ins = People.new(name)
    --          ,    Man       People 
    copy(ins,Man)

    return ins
end

function copy(des, tab)
    for k,v in pairs(tab) do
        des[k] = v
    end
end

親のsayメソッドを呼び出して効果を見てみましょう
local p = Man.new('myname')
p:say()   --hello myname

親のsayメソッドを書き直しましょう
Man.say = function(self)
    print('my name is:'..self.name)
end

次のように呼び出します.
p:say() --my name is:myname

以上はテーブルをコピーする方法でクラスのインスタンスと継承を擬似的に実現することである.
2つ目の方法:関数閉パッケージで実現
--        ,    
function People(name)
    local ins = {}
    --     
    local function init()
        ins.name = name
    end

    --      
    ins.say = function()
        print('hello:'..ins.name)
    end

    init() --         
    return ins
end

次のように呼び出します.
local p = People('zhang san')
p:say()  --hello: zhang san

この書き方は見たかどうか、普通のクラスの構造に似ているのではないでしょうか.そう、この構造はレプリケーション・テーブルのように乱雑ではないことが明らかになっていますが、レプリケーション・テーブルの方法はもっと速いです.しかし、私有化されたもの、例えば例のinitは、テーブルをコピーすることはできません.
次に継承を書きます.
function Man(name)
    local ins = People(name)
    local function init()
        --        
    end

    --    
    ins.saygoodbye = function()
        print('goodbye:'.. ins.name)
    end

    --    
    ins.say = function()
        print('hello again:'.. ins.name)
    end

    init()
    return ins
end

よびだし
local m = Man('xiaoming')
m:say() --hello again:xiaoming
m:saygoodbye() --goodbye:xiaoming