Lua学習小記
8601 ワード
(1).. 文字列接続オペレータですが、スペースで区切らなければなりません.そうしないと、luaは小数点(2)文字列内でエスケープする必要はありません.[]]または[==[]===[]=[==](==他の任意の記号)(3)コメント-[[](一般的には-]])または-[=[]=(4)文字列を数値に変換します.tonumber()正しい数値に戻すことができない場合nil変数のタイプを確認する必要がある場合はtype(o)=「number」type(o)=「string」type(o)=「table」(5)数値(またはfunction)で文字列に変換できます:tostring()6)文字列の長さを取得し、文字列の前に#print(#」hello)を配置します.#配列の前に置くと最後のインデックス値を返すtableも使用できる.getn.table.maxnは最大正索引数(空隙を無視)(7)table作成:a={}を返し、a[「x」=12,a.y=14を付与する.a.yはa["y"]に等価であり、a[y]は変数yをインデックス(8)として小数点以下の2桁のx-x%0.01(9)が~==に等しくなく、andおよびorはパラメータを返し、notはtrueまたはfalse(10)xが存在しない場合、xにデフォルト値x=x or dを設定したデフォルト値(11)cのa?b:cはluaにおいてa and b or c(12)if then elseif else end while do end repeat until for do break endとして実現できる無限ループを望む場合、上限はmathを用いることができる.huge for i,v in ipairs(a)do print(v)end(pairs,ipairs,string.gmatch)ipairs反復配列のシーケンス番号と値、pairs反復tableのkey,value(13)unpack()は1つの配列をパラメータとして受け入れ、その配列のすべての要素(14)...は関数の変長パラメータ、function add(...)for i、v in ipairs(...)doまたはlocal aを表すことができるb=...select(n,...)は、nil local arg={...}を含む可変実パラメータのn番目のパラメータを返すことができる.arg.n=select("#",...)argは新版で用いられた代替元の…(14.5)v:name(args)はv.name(v,args),":"は文法糖定義時:Class:test()とClassである.test(self)が等価な呼び出しの場合:object:test()とobject.test(object)等価でポイント(.)を静的メソッドとして,コロン(:)をメンバーメソッドとして扱う.(15)すべてのfunctionはclosureの特例であり、パラメータはグローバル変数、ローカル変数、非ローカル変数(16)反復器のいくつかの方式を含む:1.closure反復器、1つのclosureの方法を返して、方法を返す必要があって、一定の状態、変数を制御します
(17)動的生成実行コード:loadfile(),loadstring(),dofileの実装は以下の通りである.
(18)動的接続機構package.loadlibは動的リンクライブラリ、packageを導入するために使用される.loaded[name]がtrueであるかどうかは、モジュールがロードされているかどうかを判断します.パッケージにはluaモジュールとCモジュールが同時に含まれています.(19)エラー処理、assert()erro()異常を投げ出すpcall()キャプチャ異常エラーが発生しなければ、pcallはtrueおよび関数呼び出しの戻り値を返し、そうでなければfalseおよびエラーメッセージif pcall(function()<保護コード>end)then<常規コード>else<エラー処理コード>end debugを返す.debug():luaプロンプトdebugを提供する.traceback():呼び出しスタックに基づいて拡張されたエラーメッセージを構築し、現在実行されている呼び出しスタックの上の2つの関数をいつでも取得してxpcall(,)と一緒に使用して追加情報を得ることができます.
(20)協同プログラムluaは、協同プログラムに関するすべての関数を「coroutine」というtableに格納する.協程の状態:保留、運転、死亡、正常作成(保留状態):co=coroutine.create(function(a, b) print(a .. b) coroutine.yield()end)ステータスの表示:coroutine.status(co)起動または再起動(運転、運転完了後死亡):coroutine.resume(co,「a」,「b」)のうち「a」,「b」は、コヒーレンスに渡されるパラメータであり、最初に実行されない場合、入力されるパラメータは、コヒーレンス内の対応するyield()の戻り値(2番目の戻り値から始まり、1番目はtrueまたはfalse)である.コンシステント終了後の戻り値もcoroutineとする.resumeの戻り値(最初はtrueまたはfalse、2番目は実際の戻り値)です.実行中、関数のcoroutine.yield()は、関数を一時停止してから実行を再開できます.死亡したコンシステントが呼び出され続けるとfalseとエラーメッセージが返されます.AがBを起動すると、Aは正常状態となる.wrap(function()dosometing end):コヒーレント実装を書くための反復器
(21)tableの各文字列要素を組み合わせるtable.concat(table) (22) string.gmatch(文字列が検索された反復器を返す)string.find(文字列検索)string.gsub(グローバル文字列置換)string.gfind(グローバル文字列検索)(23)以上の文字列の方法はluaモードマッチング:文字列モードに基づいている.(点):任意の文字とペア%a:任意のアルファベットとペア%c:任意の制御子とペア(例)%d:任意の数値とペア%l:任意の小文字とペア%p:任意の句読点(punctuation)ペアリング%s:空白文字とペアリング%u:任意の大文字とペアリング%w:任意のアルファベット/数字とペアリング%x:任意の16進数とペアリング%z:任意の0を表す文字とペアリング%x(ここでxは非アルファベット非デジタル文字):文字xとペアリング.主に式に機能する文字を処理するために用いられる^$().[]*+-?)のペアリングの問題、例えば%%と%のペアリング%bは対称な文字をマッチングするために使用される.よく「%bxy」と書きますが、xとyは任意の2つの異なる文字です.xはマッチングの開始とし,yはマッチングの終了とする.例えば、'%b()'のマッチングが'(')で始まる、')'で終わる文字列は、上記の文字クラスが大文字で書かれている場合に、この文字クラス以外の任意の文字と対になることを示す.例えば、%Sは、空白以外の任意の文字とペアを表す.たとえば、'%A'はアルファベット以外の文字です.'%'特殊文字のエスケープ文字として使用されるため、'%'一致点;'%'一致文字'%'です.エスケープ文字'%'は、特殊文字だけでなく、すべてのアルファベット以外の文字にも使用できます.+前の文字を1回または複数回照合*前の文字を0回または複数回照合-前の文字を0回または複数回照合しますか?前の文字に0回または1回stringする.format("%q",a)文字列aを二重引用符で囲むことができ、a中の二重引用符や改行符などの文字が手動で生成する長い文字列を正しく転送し、その中の問題文字をエスケープすることなく[=[...]=]で文字stringを囲むことができる.format("%s%s%s","1","2","3")(24)メタテーブルsetmetatable(set,mt)getmetatable()リロード+mt.add=Addリロード*mt._mulリロード-mt._subリロード/_divリロード%_modリロード^_powリロード-_numリロード...concat以上は算数クラスメタメソッドで、luaは最初のオブジェクトのメソッドを優先的に呼び出し、なければ2番目のリロード=_を呼び出すeqリロード<_ltリロード<=_le以上がリレーショナルクラスメタメソッドであり、2つのオブジェクトのメソッドが同じluaでなければ呼び出されません.そうしないとfalse__を返します.tostring定義tostring()メソッド_index tableに存在しないフィールドにアクセスすると、__が呼び出されます.indexメソッド、rawgetはメタメソッド_を無視できますnewindexは値を割り当てて、更新時に呼び出して、rawsetはこの方法を無視することができます
(25)動的実行コード:dofile(filename),loadfile(filename),loadstring(「return」..varname)()(26)変数名を動的に計算し、グローバル変数varname=name_に付与する.tostring(i); _G[varname]=value(27)は関数の環境を変更し、setfenv(func,env)はグローバル環境を継承しますが、元のグローバル変数とは異なる環境です.
(28)tableを巡回する(keyのメンバーでも関数のメンバーでも巡回できる):
function valuse(t)
local i = o
returen function(0) i = i + 1; return t[i] end
end
2. , , ,
local functino iter(a, i)
i = i +1
local v = a[i]
if v then
return i ,v
end
end
3. , , ,
local iterator --
function iter()
local state = {line = io.read(), pos = 1}
return iterator, state
end
function iterator (state)
< block >
return something
end
4.
(17)動的生成実行コード:loadfile(),loadstring(),dofileの実装は以下の通りである.
function dofile(filename)
local f = assert(loadfile(filename))
return f(0
end
loadstring("i = i + 1") ( , ) function() i = i + 1 end
(18)動的接続機構package.loadlibは動的リンクライブラリ、packageを導入するために使用される.loaded[name]がtrueであるかどうかは、モジュールがロードされているかどうかを判断します.パッケージにはluaモジュールとCモジュールが同時に含まれています.(19)エラー処理、assert()erro()異常を投げ出すpcall()キャプチャ異常エラーが発生しなければ、pcallはtrueおよび関数呼び出しの戻り値を返し、そうでなければfalseおよびエラーメッセージif pcall(function()<保護コード>end)then<常規コード>else<エラー処理コード>end debugを返す.debug():luaプロンプトdebugを提供する.traceback():呼び出しスタックに基づいて拡張されたエラーメッセージを構築し、現在実行されている呼び出しスタックの上の2つの関数をいつでも取得してxpcall(,)と一緒に使用して追加情報を得ることができます.
(20)協同プログラムluaは、協同プログラムに関するすべての関数を「coroutine」というtableに格納する.協程の状態:保留、運転、死亡、正常作成(保留状態):co=coroutine.create(function(a, b) print(a .. b) coroutine.yield()end)ステータスの表示:coroutine.status(co)起動または再起動(運転、運転完了後死亡):coroutine.resume(co,「a」,「b」)のうち「a」,「b」は、コヒーレンスに渡されるパラメータであり、最初に実行されない場合、入力されるパラメータは、コヒーレンス内の対応するyield()の戻り値(2番目の戻り値から始まり、1番目はtrueまたはfalse)である.コンシステント終了後の戻り値もcoroutineとする.resumeの戻り値(最初はtrueまたはfalse、2番目は実際の戻り値)です.実行中、関数のcoroutine.yield()は、関数を一時停止してから実行を再開できます.死亡したコンシステントが呼び出され続けるとfalseとエラーメッセージが返されます.AがBを起動すると、Aは正常状態となる.wrap(function()dosometing end):コヒーレント実装を書くための反復器
(21)tableの各文字列要素を組み合わせるtable.concat(table) (22) string.gmatch(文字列が検索された反復器を返す)string.find(文字列検索)string.gsub(グローバル文字列置換)string.gfind(グローバル文字列検索)(23)以上の文字列の方法はluaモードマッチング:文字列モードに基づいている.(点):任意の文字とペア%a:任意のアルファベットとペア%c:任意の制御子とペア(例)%d:任意の数値とペア%l:任意の小文字とペア%p:任意の句読点(punctuation)ペアリング%s:空白文字とペアリング%u:任意の大文字とペアリング%w:任意のアルファベット/数字とペアリング%x:任意の16進数とペアリング%z:任意の0を表す文字とペアリング%x(ここでxは非アルファベット非デジタル文字):文字xとペアリング.主に式に機能する文字を処理するために用いられる^$().[]*+-?)のペアリングの問題、例えば%%と%のペアリング%bは対称な文字をマッチングするために使用される.よく「%bxy」と書きますが、xとyは任意の2つの異なる文字です.xはマッチングの開始とし,yはマッチングの終了とする.例えば、'%b()'のマッチングが'(')で始まる、')'で終わる文字列は、上記の文字クラスが大文字で書かれている場合に、この文字クラス以外の任意の文字と対になることを示す.例えば、%Sは、空白以外の任意の文字とペアを表す.たとえば、'%A'はアルファベット以外の文字です.'%'特殊文字のエスケープ文字として使用されるため、'%'一致点;'%'一致文字'%'です.エスケープ文字'%'は、特殊文字だけでなく、すべてのアルファベット以外の文字にも使用できます.+前の文字を1回または複数回照合*前の文字を0回または複数回照合-前の文字を0回または複数回照合しますか?前の文字に0回または1回stringする.format("%q",a)文字列aを二重引用符で囲むことができ、a中の二重引用符や改行符などの文字が手動で生成する長い文字列を正しく転送し、その中の問題文字をエスケープすることなく[=[...]=]で文字stringを囲むことができる.format("%s%s%s","1","2","3")(24)メタテーブルsetmetatable(set,mt)getmetatable()リロード+mt.add=Addリロード*mt._mulリロード-mt._subリロード/_divリロード%_modリロード^_powリロード-_numリロード...concat以上は算数クラスメタメソッドで、luaは最初のオブジェクトのメソッドを優先的に呼び出し、なければ2番目のリロード=_を呼び出すeqリロード<_ltリロード<=_le以上がリレーショナルクラスメタメソッドであり、2つのオブジェクトのメソッドが同じluaでなければ呼び出されません.そうしないとfalse__を返します.tostring定義tostring()メソッド_index tableに存在しないフィールドにアクセスすると、__が呼び出されます.indexメソッド、rawgetはメタメソッド_を無視できますnewindexは値を割り当てて、更新時に呼び出して、rawsetはこの方法を無視することができます
(25)動的実行コード:dofile(filename),loadfile(filename),loadstring(「return」..varname)()(26)変数名を動的に計算し、グローバル変数varname=name_に付与する.tostring(i); _G[varname]=value(27)は関数の環境を変更し、setfenv(func,env)はグローバル環境を継承しますが、元のグローバル変数とは異なる環境です.
a = 1
local newgt = {}
setmetatable(newgt, {__index = _G}) -- __index, print
setfenv(1, newgt) -- 1 ,2 , 1 a
print(a) --> 1
a ,_G.a
(28)tableを巡回する(keyのメンバーでも関数のメンバーでも巡回できる):
function Raverse()
local i = 0
for k, v in pairs( _G ) do
print("v: " .. tostring(k));
i = i + 1;
end
print("num = " .. tostring(i));
end