Lua基本文法学習記録について

5668 ワード

ループ
  • while
  • for
  • repeat … until
  • break
  • をサポート
    プロセス制御
  • luaの0はtrueで、booleanタイプのfalseとnilだけがfalse
  • です.
  • 構文
    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))
    
  • をサポート
    演算子
    ぶんかつ
  • 演算子
  • 関係演算子
  • ~=
  • に等しくない.
  • 論理演算子
  • and or not

  • その他の演算子
  • ..接続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ファイルまたはCライブラリからモジュール
  • をロードしようとします.
  • luaファイルを検索するパスは、グローバル変数packageに格納される.pathではluaが起動すると環境変数LUA_PATHの値はこの環境変数を初期化する.この環境変数が見つからない場合は、コンパイル時に定義されたデフォルトパスを使用して
  • を初期化します.
  • LUA_PATHは、例えば、
    #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つの関数の処理
  • setmetatable(table, metatable)
  • getmetatable(table)

  • __index:phpの__に似ていますget()メソッド、luaはテーブル要素のルールを検索します.
  • テーブルで検索し、見つかった場合は要素を返します.
  • に続行できません.
  • このテーブルにメタテーブルがあるか否かを判断し、メタテーブルがなければnilを返し、メタテーブルがあれば
  • を継続する.
  • は、メタテーブルに__indexの方法があるかどうかを判断し、__indexがnilであればnilを返す.テーブルの場合は、1、2、3を繰り返します.関数の場合、関数の戻り値
  • が返されます.
    __newindex:テーブルの更新に使用され、__indexはテーブルへのアクセスに使用されます.
    テーブルにオペレータを追加する
  • __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チュートリアル|菜鳥チュートリアル