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つあることに気づくべきでしょう.それぞれ
lua
とluac
です../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