トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Lua
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ metatable


  metatable とは
  userdata, table への演算に対してどの関数を呼び出すのかを
  連想配列で表した表( テーブル )のこと。
  データ型はテーブルと同じで、userdata, table と関連づけるだけの違い。




  
___

■ MetaMethod とは演算子を独自処理におきかえる

POINT [ 演算子 ]を独自処理におきかえる.( operator のこと ) MetaMethod を利用することで実現している. tbl の値取得, 関数呼び出しの値を変更することも可能. OO では [ 演算子を独自に定義できる ]ことが特徴. {"pos" , getPos() } < -> tbl 経由で呼び出す. ? { data, Evt=Func } の組を MetaTbl として にセットすることで Lua に通知する。
___

■ event の種類

-- MetaMethod
   local data1 = { name="a", price=120}
   local data2 = { name="b", price=100}

   function add( op1, op2 )
      return op1.price + op2.price;
   end

   -- data1 の加算 + には myAdd を利用するように登録
   setmetatable( data1, { __add = add, ... } )
   print( data1 + data2 );
___

■ Overload

POINT metatable はある値( Object )に対して, 特別な演算を overload する際に便利。 スレッド、関数、ユーザーデータ型のオブジェクトはメタテーブルをもつ。 { KEY == Event , 値 = MetaMethod } 使いどころ その値に対して特殊な処理をした際の, 挙動を定義する 数値以外の値が加算のオペランドになった ---> Luaはメタテーブルの "__add" フィールドをチェック 加算を行うためにその関数をcall Object のふるまいを定義する metatable は、算術演算、関係比較、連結、長さ演算子、インデックス付けについて オブジェクトがどう振る舞うかを制御する メタテーブルがコントロールできる演算を以下のとおり 各演算のキーは、その名前の前に2つのアンダースコア `__´ が付く文字列
  __add,            a + b の時にコールされる
  __sub, 
  __mul, 
  __div, 
  __mod,
  __concat, 
  __len
  __tostring       print( a ); 

-- 配列に metatable を セットして, add を overload してみる
  setmetatable( metatableをセットする値, {metatable}), 
  metatable = {_add, 関数名 }
___

■ 環境table

環境は table のひとつ. thread に関連つけられた環境は, global環境と呼ぶ.
















NINJAIDX 18