Luaベースチュートリアルの付与文、式、フロー制御、関数学習ノート
4801 ワード
わりあてぶん
注記、単行は(-)で表されます.マルチライン用(--[...])表示する定義、luaには定義されていません(データ型を明記します).これは、値を割り当てることによってデータ型を決定します.付与は、変数の値を変更し、テーブルドメインを変更する最も基本的な方法です.a = "hello".. "world"
Luaは複数の変数に同時に値を割り当てることができ、変数リストと値リストの各要素はカンマで区切られ、値付与文の右側の値は左の変数に順次与えられる.a, b = 10, 2*x a=10; b=2*x
付与文Luaに遭遇すると、右側のすべての値を計算してから付与操作を実行するので、変数の値を交換することができます.
変数の個数と値の個数が一致しない場合、Luaは常に変数の個数に基づいて以下のポリシーを採用します.
a.変数個数>値の個数は変数個数でnilを補う.b.変数個数多値付与は、変数を交換するためによく使用されるか、関数呼び出しを変数に返す:a,b=f()--f()は、2つの値を返し、1つ目はa、2つ目はbに付与される.
式#シキ#
式---式には演算子が必要です.
1.算術演算子:+-*/^(加算減算乗数、二元演算子),-(負、一元演算子);操作はC++と同じです.関係演算子:、<=、>=、=、~=(等しくない);これらのオペレータはfalseまたはtrueの結果を返します.==和~=2つの値を比較し、2つの値のタイプが異なる場合、Luaは両者が異なると考えている.nilは自分としか等しくない.Luaはtables,userdata,functionsを参照により比較する.すなわち、両者が同一のオブジェクトを表す場合にのみ等しい.
3.論理演算子:and、or、not;論理演算子はfalseとnilが偽(false)であり、その他は真であり、0もtrueであると考えている.andとorの演算結果はtrueとfalseではなく,その2つのオペランドに関連している.a and b--aがfalseであれば、aを返し、そうでなければbを返す.a or b--aがtrueであれば、aを返し、そうでなければbを返す.スタックを考えてみると、最初の変数が真偽を判断できれば、2番目の変数を判断する必要はありません.
andの優先度はorより高い.
C言語の三元演算子、a?b:c=>>Luaでは、(a and b)or c notの結果がfalseまたはtrueに戻るように実現できます.
4.連結演算子:..(2点);オペランドが数字の場合、Luaは数字を文字列に変換します.
プロセス制御
制御構造の条件式の結果は任意の値であり、Luaはfalseとnilが偽であり、他の値が真であると考えている.do..end(c/c++に相当する{})
if文には、3つの形式があります
Luaはswitch文をサポートしていないため,この一連のif-else ifコードはよく見られる.
while文
repeat-until文
条件判断は、循環体の後に行われるので、循環体は少なくとも1回実行される.C++のように、do..while()
for文
数値型for(number for)
汎用for(generic for)、汎用forループは反復器(iterator)関数クラスを通じてすべての値を遍歴する.
Luaのベースライブラリは、配列を巡る反復器関数であるipairsを提供します.各ループにおいて、iはインデックス値を付与され、vはインデックスすべき配列要素値を付与される.
標準ライブラリには、反復ファイル内の各行(io.lines)、反復table要素(pairs)、反復配列要素(ipairs)、反復文字列内の単語(string.gmatch)など、いくつかの反復器があります.
break文とreturn文
関数#カンスウ#
関数定義:関数をキーワードfunctionで定義し、ローカル変数をキーワードendで終了:キーワードlocalで定義します.localで定義されていない場合は、関数内部で定義された変数でもグローバル変数です.関数は、return a,b,c,...平行賦値:a,b=c,dグローバル変数:前のコードはfoo,r 1,r 2の3つのグローバル変数を定義した.
注記、単行は(-)で表されます.マルチライン用(--[...])表示する定義、luaには定義されていません(データ型を明記します).これは、値を割り当てることによってデータ型を決定します.付与は、変数の値を変更し、テーブルドメインを変更する最も基本的な方法です.a = "hello".. "world"
Luaは複数の変数に同時に値を割り当てることができ、変数リストと値リストの各要素はカンマで区切られ、値付与文の右側の値は左の変数に順次与えられる.a, b = 10, 2*x a=10; b=2*x
付与文Luaに遭遇すると、右側のすべての値を計算してから付与操作を実行するので、変数の値を交換することができます.
x, y = y, x -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i] -- swap 'a[i]' for 'a[i]'
変数の個数と値の個数が一致しない場合、Luaは常に変数の個数に基づいて以下のポリシーを採用します.
a.変数個数>値の個数は変数個数でnilを補う.b.変数個数多値付与は、変数を交換するためによく使用されるか、関数呼び出しを変数に返す:a,b=f()--f()は、2つの値を返し、1つ目はa、2つ目はbに付与される.
式#シキ#
式---式には演算子が必要です.
1.算術演算子:+-*/^(加算減算乗数、二元演算子),-(負、一元演算子);操作はC++と同じです.関係演算子:、<=、>=、=、~=(等しくない);これらのオペレータはfalseまたはtrueの結果を返します.==和~=2つの値を比較し、2つの値のタイプが異なる場合、Luaは両者が異なると考えている.nilは自分としか等しくない.Luaはtables,userdata,functionsを参照により比較する.すなわち、両者が同一のオブジェクトを表す場合にのみ等しい.
print((2 < 15)) --true
print(("1" == 1)) --false
print(("2" > "15")) --true
a={};a.x=1;a.y=0;
b={};b.x=1;b.y=0;
print((a ~= b)); --true
c = a;
print((a == c)); --true
--Lua , , 。
-- , ,Lua , :2 < "15"
3.論理演算子:and、or、not;論理演算子はfalseとnilが偽(false)であり、その他は真であり、0もtrueであると考えている.andとorの演算結果はtrueとfalseではなく,その2つのオペランドに関連している.a and b--aがfalseであれば、aを返し、そうでなければbを返す.a or b--aがtrueであれば、aを返し、そうでなければbを返す.スタックを考えてみると、最初の変数が真偽を判断できれば、2番目の変数を判断する必要はありません.
andの優先度はorより高い.
C言語の三元演算子、a?b:c=>>Luaでは、(a and b)or c notの結果がfalseまたはtrueに戻るように実現できます.
print(not nil) --> true
print(not false) --> true
print(not 0) --> false
print(not not nil) --> false
4.連結演算子:..(2点);オペランドが数字の場合、Luaは数字を文字列に変換します.
print("Hello " .. "World") --> Hello World
print(0 .. 1) --> 01
プロセス制御
制御構造の条件式の結果は任意の値であり、Luaはfalseとnilが偽であり、他の値が真であると考えている.do..end(c/c++に相当する{})
if文には、3つの形式があります
if conditions then
then-part
end;
if conditions then
then-part
else
else-part
end;
if conditions then
then-part
elseif conditions then
elseif-part
.. ---> elseif
else
else-part
end;
Luaはswitch文をサポートしていないため,この一連のif-else ifコードはよく見られる.
while文
while condition do
statements;
end;
repeat-until文
repeat
statements;
until conditions;
条件判断は、循環体の後に行われるので、循環体は少なくとも1回実行される.C++のように、do..while()
for文
数値型for(number for)
for var=exp1,exp2,exp3 do
loop-part
end
--for exp3 step exp1( ) exp2( ), loop-part。 exp3 , step=1
汎用for(generic for)、汎用forループは反復器(iterator)関数クラスを通じてすべての値を遍歴する.
-- a
for i,v in ipairs(a) do print(v) end
Luaのベースライブラリは、配列を巡る反復器関数であるipairsを提供します.各ループにおいて、iはインデックス値を付与され、vはインデックスすべき配列要素値を付与される.
key :
-- print all keys of table 't'
--for k in pairs(t) do print(k) end
days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}
revDays = {}
for i,v in pairs(days) do
revDays[v] = i --revDays = {["Sunday"] = 1, ["Monday"] = 2,["Tuesday"] = 3, ["Wednesday"] = 4,["Thursday"] = 5, ["Friday"] = 6,["Saturday"] = 7}
end
--x = "Tuesday"
--print(revDays[x])--3
for k in pairs(days) do print(k) end --1234567
for k in pairs(revDays) do print(k) end
標準ライブラリには、反復ファイル内の各行(io.lines)、反復table要素(pairs)、反復配列要素(ipairs)、反復文字列内の単語(string.gmatch)など、いくつかの反復器があります.
break文とreturn文
関数#カンスウ#
function foo(a, b, c)
local sum = a + b
return sum, c --
end
r1, r2 = foo(1, '123', 'hello') --
print(r1, r2) --124 hello
関数定義:関数をキーワードfunctionで定義し、ローカル変数をキーワードendで終了:キーワードlocalで定義します.localで定義されていない場合は、関数内部で定義された変数でもグローバル変数です.関数は、return a,b,c,...平行賦値:a,b=c,dグローバル変数:前のコードはfoo,r 1,r 2の3つのグローバル変数を定義した.