中国語プログラミング入門(Lua 5.4中国語版)第二章Luaデータ型第三節表関数スレッドユーザーデータ


テーブル
 
Luaでは、テーブル(table)の作成は「構造式」によって行われ、最も簡単な構造式は{}であり、空のテーブルを作成するために使用されます.
テーブルにデータを追加して、テーブルを直接初期化することもできます.
≪インスタンス|Instance|emdw≫
--         (table)
    1 = {}
 
--      
    2 = {"  ", "  ", "  ", "  "}

 
Luaのテーブル(table)は、実際には「関連配列」(associative arrays)であり、配列のインデックスは数値または文字列であってもよい.
≪インスタンス|Instance|emdw≫
--     .lua     
a = {}
a[" "] = "  "
  = 10
a[ ] = 22
a[ ] = a[ ] + 11
   k, v      (a)  
      (k .. " : " .. v)
  

スクリプトの実行結果は次のとおりです.
$ lua     .lua 
  :   
10 : 33

 
他の言語とは異なる配列は0を配列の初期インデックスとし,Luaでは表のデフォルト初期インデックスは一般に1で始まる.
≪インスタンス|Instance|emdw≫
--     2.lua     
    2 = {"  ", "  ", "  ", "  "}
    ,        ( 2)  
      (" ",  )
  

スクリプトの実行結果は次のとおりです.
     1
     2
     3
     4

 
テーブル(table)は長さサイズが固定されず、新しいデータが追加されるとテーブル(table)の長さが自動的に増加し、初期のテーブル(table)がなくてもnilになります.
≪インスタンス|Instance|emdw≫
--     3.lua     
a3 = {}
   i = 1, 10  
    a3[i] = i
  
a3[" "] = " "
  (a3[" "])
  (a3["   "])

スクリプトの実行結果は次のとおりです.
$ lua     3.lua 
 
nil

 
関数(function)
Luaでは、関数は「第1クラス値(First-Class Value)」とみなされ、関数は変数に存在することができる.
≪インスタンス|Instance|emdw≫
--     .lua     
     1(n)
       n == 0  
           1
      
           n *   1(n - 1)
      
  
  (  1(5))
  2 =   1
  (  2(5))

スクリプトの実行結果は次のとおりです.
$ lua     .lua 
120
120

 
関数(function)は、匿名関数(anonymous function)でパラメータを介して渡すことができる.
≪インスタンス|Instance|emdw≫
--     2.lua     
       ( 4,    )
           k ,v      ( 4)  
                  (    (k,v));
          
  


 4={ 1=" 1", 2=" 2"};
    ( 4,
  ( , )--    
            .."=".. ;
  
);

スクリプトの実行結果は次のとおりです.
$ lua     2.lua 
 1 =  1
 2 =  2

 
スレッド(thread)
Luaでは,最も主要なスレッドは協同プログラム(coroutine)である.スレッド(thread)とあまり差がなく、独自のスタックを持っています.
ローカル変数と命令ポインタは、他の協同プログラムとグローバル変数と他の大部分を共有することができます.
 
スレッドとスレッドの違い:スレッドは同時に複数実行できますが、スレッドは任意の時点で1つしか実行できません.実行状態のスレッドは
サスペンドされた場合にのみ一時停止します.
 
ユーザデータ(userdata)
ユーザーデータ(userdata)は、アプリケーションまたはC/C++言語ライブラリによって作成されるタイプを表すユーザー定義データです.
C/C++の任意のデータ型のデータ(通常はstructとポインタ)はLua変数に格納されて呼び出される.