Lua基本文法学習記録について
5668 ワード
ループ while for repeat … until break をサポート
プロセス制御 luaの0はtrueで、booleanタイプのfalseとnilだけがfalse です.構文 関数#カンスウ#
主な2つの用途指定されたタスクを完了する は、値 を計算して返す.
関数の定義
注意点関数は、パラメータとして関数 に渡すことができる.多戻り値 可変パラメータ をサポート
演算子
ぶんかつ演算子 関係演算子 に等しくない.
論理演算子 and or not
その他の演算子 を返す.
優先度
^
not -
*/
+ -
..
< > <= >= ~= ==
and
or
^と..を除いて外は左接続
文字列
3つの表現単一引用符 二重引用符 [[]]間の文字 文字列アクション
方法
用途
string.upper
string.lower
string.gsub(mainString, findString, replaceString, num)
文字に置換
string.strfind(str, substr, [init, [end]])
サブストリングの位置を検索し、nilを返す存在しません.
string.reverse(arg)
string.format(...)
string.format('this is value: %d', 4)
string.char(arg)/string.byte(arg, [int])
charは整形数字を文字に変換して接続する.byte変換文字は整数型で、ある文字を指定できます.デフォルトは最初の文字です.
string.len()
string.rep()
文字列のstringのnコピーを返します
..
2つの文字列を接続
はいれつ
同じデータ型の要素が一定の順序で配列された集合.1次元配列と多次元配列であってもよい.
1 D配列
せんけいひょう
luaのインデックス値は1から始まりますが、0から始まるように指定することもできます
反復器(iterator)
luaでは反復器はポインタタイプをサポートする結果であり、セット内の各要素を巡回することができます.
ステートレス反復器とマルチステート反復器について
テーブル
関連配列を使用すると、任意のタイプの値で配列のインデックスを作成できますが、nilではありません.
サイズは固定されておらず、必要に応じて拡張できます
luaもtableによってモジュール、パケット、オブジェクトを解決する
テーブルの操作
方法
用途
table.concat(table, [, sep [, start [, end]]])
tableの配列部分はstartからend位置までのすべての要素で、要素間で区切り記号sepを指定できます.
table.insert(table, [pos], value)
posデフォルト末尾
table.remove(table, [,pos])
posデフォルト末尾
table.sort(table, [, comp])
与えられたtableを昇順にソートする
モジュールとパッケージ
Luaのモジュールは変数、関数などの既知の要素からなるtableなので、一つのモジュールを作成するのは簡単です.tableを作成し、エクスポートする定数、関数を入れて、最後にこのtableに戻ればいいのです.以下に、カスタムモジュールmoduleを作成する.lua、ファイルコードフォーマットは以下の通りです.
require関数
モジュールをロードします.たとえば
requireを実行すると、モジュール定数または関数からなるtableが返され、そのtableを含むグローバル変数も定義されます.
ロードメカニズム luaファイルまたはCライブラリからモジュール をロードしようとします. luaファイルを検索するパスは、グローバル変数packageに格納される.pathではluaが起動すると環境変数LUA_PATHの値はこの環境変数を初期化する.この環境変数が見つからない場合は、コンパイル時に定義されたデフォルトパスを使用して を初期化します. LUA_PATHは、例えば、 のような設定をカスタマイズすることができる.
Cパッケージ
Luaで書かれたパケットとは異なり、Cパケットは使用する前にまずロードして接続する必要があります.ほとんどのシステムで最も容易な実現方法は、ライブラリメカニズムを動的に接続することです.
Luaはloadlibという関数内ですべての動的接続の機能を提供している.この関数には、ライブラリの絶対パスと初期化関数の2つのパラメータがあります.典型的な呼び出しの例は次のとおりです.
メタテーブル
テーブルの動作を変更し、各動作に対応する元のメソッドを関連付けます.
要素の重要な2つの関数の処理 setmetatable(table, metatable) getmetatable(table)
__index:phpの__に似ていますget()メソッド、luaはテーブル要素のルールを検索します.テーブルで検索し、見つかった場合は要素を返します. に続行できません.このテーブルにメタテーブルがあるか否かを判断し、メタテーブルがなければnilを返し、メタテーブルがあれば を継続する.は、メタテーブルに が返されます.
__newindex:テーブルの更新に使用され、
テーブルにオペレータを追加する __add __sub __nul __div __mod __umn:対応するオペレータ:- __contact __eq __lt __gt
__call
__tostring
協同プログラム(coroutine)
Lua協同プログラム(coroutine)はスレッドと比較して類似している:独立したスタック、独立した局所変数、独立した命令ポインタを持ち、同時に他の協同プログラムとグローバル変数と他の大部分のものを共有する.
スレッドと協同プログラムの違い
スレッドと協同プログラムの主な違いは、複数のスレッドを有するプログラムが複数のスレッドを同時に実行することができ、協同プログラムは互いに協力して実行する必要があることである.いずれかの指定された時点で1つの協同プログラムのみが実行され、この実行中の協同プログラムは、明確に要求された保留時にのみ保留されます.協同プログラムは少し同期したマルチスレッドに似ていて、同じスレッドロックを待っているいくつかのスレッドは少し協同しています.
基本構文
方法
説明
coroutine.create()
作成、戻り、パラメータは関数です.
coroutine.resume()
coroutineの再起動、起動、create()の併用
coroutine.yield()
保留中
coroutine.status()
dead\suspend\running
coroutine.wrap()
とcreate()機能の重複
corouting.running()
実行中のcoroutineのスレッド番号を返します
リファレンス
Luaチュートリアル|菜鳥チュートリアル
プロセス制御
if (0)
then
print('hello')
end
主な2つの用途
関数の定義
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
-- optional_function_scope or local
--
注意点
function average(...)
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
print(" " .. #arg .. " ")
return result/#arg
end
print(" ",average(10,5,3,4,5,6))
演算子
ぶんかつ
~=
は..
接続2文字列#
一元演算子は、文字列またはテーブルの長さ優先度
^
not -
*/
+ -
..
< > <= >= ~= ==
and
or
^と..を除いて外は左接続
文字列
3つの表現
方法
用途
string.upper
string.lower
string.gsub(mainString, findString, replaceString, num)
文字に置換
string.strfind(str, substr, [init, [end]])
サブストリングの位置を検索し、nilを返す存在しません.
string.reverse(arg)
string.format(...)
string.format('this is value: %d', 4)
string.char(arg)/string.byte(arg, [int])
charは整形数字を文字に変換して接続する.byte変換文字は整数型で、ある文字を指定できます.デフォルトは最初の文字です.
string.len()
string.rep()
文字列のstringのnコピーを返します
..
2つの文字列を接続
はいれつ
同じデータ型の要素が一定の順序で配列された集合.1次元配列と多次元配列であってもよい.
1 D配列
せんけいひょう
array = {'lua', 'hello'}
for i=0, 2 do
print(array[i])
end
-- nil
-- lua
-- hello
luaのインデックス値は1から始まりますが、0から始まるように指定することもできます
反復器(iterator)
luaでは反復器はポインタタイプをサポートする結果であり、セット内の各要素を巡回することができます.
ステートレス反復器とマルチステート反復器について
テーブル
関連配列を使用すると、任意のタイプの値で配列のインデックスを作成できますが、nilではありません.
サイズは固定されておらず、必要に応じて拡張できます
luaもtableによってモジュール、パケット、オブジェクトを解決する
テーブルの操作
方法
用途
table.concat(table, [, sep [, start [, end]]])
tableの配列部分はstartからend位置までのすべての要素で、要素間で区切り記号sepを指定できます.
table.insert(table, [pos], value)
posデフォルト末尾
table.remove(table, [,pos])
posデフォルト末尾
table.sort(table, [, comp])
与えられたtableを昇順にソートする
モジュールとパッケージ
Luaのモジュールは変数、関数などの既知の要素からなるtableなので、一つのモジュールを作成するのは簡単です.tableを作成し、エクスポートする定数、関数を入れて、最後にこのtableに戻ればいいのです.以下に、カスタムモジュールmoduleを作成する.lua、ファイルコードフォーマットは以下の通りです.
-- module.lua
-- module
module = {}
--
module.constant = " "
--
function module.func1()
io.write(" !
")
end
local function func2()
print(" !")
end
function module.func3()
func2()
end
return module
require関数
モジュールをロードします.たとえば
requireを実行すると、モジュール定数または関数からなるtableが返され、そのtableを含むグローバル変数も定義されます.
require("")
require ""
-- test_module.lua
-- module module.lua
require("module")
print(module.constant)
module.func3()
-- test_module2.lua
-- module module.lua
-- m
local m = require("module")
print(m.constant)
m.func3()
ロードメカニズム
#LUA_PATH
export LUA_PATH="~/lua/?.lua;;"
# ; , ;;
Cパッケージ
Luaで書かれたパケットとは異なり、Cパケットは使用する前にまずロードして接続する必要があります.ほとんどのシステムで最も容易な実現方法は、ライブラリメカニズムを動的に接続することです.
Luaはloadlibという関数内ですべての動的接続の機能を提供している.この関数には、ライブラリの絶対パスと初期化関数の2つのパラメータがあります.典型的な呼び出しの例は次のとおりです.
local path = "/usr/local/lua/lib/libluasocket.so"
local f = loadlib(path, "luaopen_socket")
メタテーブル
テーブルの動作を変更し、各動作に対応する元のメソッドを関連付けます.
要素の重要な2つの関数の処理
__index:phpの__に似ていますget()メソッド、luaはテーブル要素のルールを検索します.
__index
の方法があるかどうかを判断し、__index
がnilであればnilを返す.テーブルの場合は、1、2、3を繰り返します.関数の場合、関数の戻り値__newindex:テーブルの更新に使用され、
__index
はテーブルへのアクセスに使用されます.テーブルにオペレータを追加する
__call
__tostring
協同プログラム(coroutine)
Lua協同プログラム(coroutine)はスレッドと比較して類似している:独立したスタック、独立した局所変数、独立した命令ポインタを持ち、同時に他の協同プログラムとグローバル変数と他の大部分のものを共有する.
スレッドと協同プログラムの違い
スレッドと協同プログラムの主な違いは、複数のスレッドを有するプログラムが複数のスレッドを同時に実行することができ、協同プログラムは互いに協力して実行する必要があることである.いずれかの指定された時点で1つの協同プログラムのみが実行され、この実行中の協同プログラムは、明確に要求された保留時にのみ保留されます.協同プログラムは少し同期したマルチスレッドに似ていて、同じスレッドロックを待っているいくつかのスレッドは少し協同しています.
基本構文
方法
説明
coroutine.create()
作成、戻り、パラメータは関数です.
coroutine.resume()
coroutineの再起動、起動、create()の併用
coroutine.yield()
保留中
coroutine.status()
dead\suspend\running
coroutine.wrap()
とcreate()機能の重複
corouting.running()
実行中のcoroutineのスレッド番号を返します
リファレンス
Luaチュートリアル|菜鳥チュートリアル