Lua-基礎解析(データ型と関数)


ps:編集長はcococos 2 d学習者(開発者とは言えないが、結局編集長は学習過程にある)で、この間編集長は学習したcococos 2 d-xだったが、市販されているほとんどの会社がluaの開発モデルを採用しているため、編集長はcocos 2 d-luaの方向に回らざるを得なかった.編集者は初心者なので、私が勉強している間に出会った問題だけを記録しています.
テーブル:
tableはluaの中で最も重要なデータ型である(正確にはタイプと呼ぶべきではなく、集合でよりイメージ的な説明、または関連配列である).関連配列:インデックスindex-valueモードを使用して、インデックス(nilの任意のタイプを除くため、tableはネストされています)と対応する値を関連付けます.作成:a={}/a={1=「first」、2=「second」、「a」=3}tabelは動的に割り当てられたオブジェクトで、プログラムは1つの参照またはポインタしか持っていないため、作成時にtableのコピーを生成したり、新しいtableを作成したりしないため、宣言する必要はありません.表示:tableの要素を操作する方法はa[「x」]とa.xの2つの方法がある.区別:a[「x」は文字列「x」を用いてtableをインデックスすることを表す.a.xは変数xを用いてtableをインデックスすることを示す
a={}  
k="X"
a[k]=10;
a[20]="great"
print(a[k])     --10
print(a["X"])  -- 10
k=20;
print(a[k])     --greate
a["X"]=a["X"]+1;  -- 21
print(a["X"])
print(a.X)  --a.X        “X”  table,  a[k]      k     table
print(a.k)  --     “K”      ,      nil
#:           table            ,             :  print(a[#a])  a           
 
  

操作符

   算术操作符:左值=右值(左值:用于表示变量在内存存储中的地址; 右值:表示该地址内存中的存储的值) 。

   关系操作符:关系操作符返回的结果都是true或false; 在处理table、函数、userdata,lua采用的是引用的比较方式(即:只有当它们引用同一个对象时,才认为相等)。     

   逻辑操作符:and、or或not 。

        and:第一个操作数为false,则返回第一个操作数;否则返回第二个操作数;         

        or:  第一个操作数为true,则返回第一个操作数;否则返回第二个操作数;      

    注释:从上面and和or的判断条件都是按照第一个操作数,因此我们称这种为“短路求值”,表示只有需要时才会去评估第二个操作数。 例如:“x=x or v” 表示: if not x then x = v end

函数:

     1.Lua中的函数属于第一类值(可以理解为是一种特殊的变量);   函数实际上是在讨论一个持有该函数的变量;   

     2.匿名函数:可以将function(x)   --body  end 视为一种函数的构造表达式(如table的构造是{}一样),然后将函数的构造式的结果称为“匿名函数”。                         

                           function derivative(f, delta)
                                delta = delta or 1e-4
                                return function (x)   --function(x)     
                                      return (f(x + delta) - f(x))/delta
                                end
                            end

                            c = derivative(math.sin)  --derivative     (            )
                            print(c(10))

    
3.クローズ関数(closure):実行時にLuaがfunctionのような形を実行するたびに...endのような式の場合、対応する関数プロトタイプの参照、環境(グローバル変数を検索するためのテーブル)の参照、およびすべてのupvalue参照からなる配列を含む新しいデータオブジェクトが作成されます.このデータ対象は閉パッケージと呼ばれます.このことから,関数はコンパイル期間概念であり,静的であり,閉パケットは実行期間概念であり,動的であることが分かる.
      
非局所変数:1つの変数が匿名関数によってアクセスされ、外層関数によってアクセスされることを示します.一般的にclosureは、関数にその関数を加えてアクセスするすべての「非局所変数」です.
                    function newCounter()
                          local i = 0   --i       
                        return function ()  --  closure
                          i = i+1
                               return i
                        end
                    end
ブログを参照してください.
http://blog.csdn.net/lidatou/article/details/3866399
 
4.非大域的な関数
local fact = function(n)
    if n==1 then 
       return 1
    else 
       return fact(n-1)   --error:  fact(n-1) ,   fact(n-1)      ,             fact(    fact nil   )
end
                    
  :
local fact 
    fact = function(n)        --         local function fact(n)    ‘   ’;         (     )   ,       
       if n==1 then 
          return 1
       else 
          return fact(n-1)  --     fact     ,        ,              ,       ,fact                               
end
   
5.末尾呼び出し
意味:関数は「エンドコール」を実行した後も、goto文と同様に、関数に関するスタックの情報を保存する必要はありません.主に現在の状態を変えるためです.
表現形式:Luaには
「return()」、すなわち「return関数名(パラメータ)」の呼び出し形式のみが「テール呼び出し」であり、余分な操作はありません.
役割:「テールコール」はスタックスペースを消費しないため、「テールコール除去」を実現することができる.