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

■ 関数(Function)


  SYNTAX
    function ::= 
      function funcbody
    funcbody ::= 
      `(´ [parlist1] `)´ block end

  function 関数名( [引数list] ) 文 end


    function func(x)
       print(x)

       return 1;
    end
    local func = function(x)
       print(x)

       return 1;
    end

    local ret = func( 10 );
    print ( ret );
POINT Lua では全ての関数は値になる。 (関数もファーストクラスオブジェクト) 関数定義も命令のひとつ. Host から呼ぶことも, Lua 自身から呼ぶことも可能 関数定義は実行可能な式. 関数型の値を持つ 関数が呼ばれると、実引数リストは仮引数リストの長さに調節される ( 多ければ,きりすてられる, たりなければ, nil がセット ) POINT 関数定義も、[ 関数名の名前を持つ変数 ]に [ 関数の実体を代入 ]していることになる。 add = function(x, y) return x*y end add(x, y);
___

■ 関数呼び出し

POINT 複数の値をかえす f() -- 戻り値は0個に調節される g(f(), x) -- f()の戻り値は1個に調節される return f() -- f()の戻り値をすべて返す {f()} -- f()のすべての戻り値からなるリストを作る
___

■ 可変引数

SYNTAX [ function(...) ]
  function ( a, b, ... )
    a = select(5, ...);   -- 可変引数 5 番目取得.
  end
  string.format
function test(...)
   local arr = {...};
   for i=1, #arr do
      print( arr[i] );
   end
end
do test( "a", "b", "c", 10 ); end function fnMyUpper( s ) local l = string.len( s ); local str = string.upper( s ); return l, str; end do local len, s; len, s = fnMyUpper( "aiueo" ); print( len.."\t"..s); end
___

■ 複数の値を返す関数

( Stack を利用することで実現している Lua は複数の値を返すことができる。 関数は data を返す際に, push 代入する際に pop;
    x, y = foo();

  -- 実は pop している. 

POINT 次の実行文では, stack 内容は消去される. x, y = 1, 2; も同様 ( stack に 1, 2 を push してから x, y へ pop ) だから次のことができる。
     x, y = y, x;
___

■ return

SYNTAX return [ expression ] DESC 関数やチャンク (関数) から値を返すために使う POINT return, break は block の最後で利用できる。 function t.a.b.c:f (...) ... end t.a.b.c.f = function (self, ...) ... end POINT [ メソッド ]とは、暗黙の引数 self を余分に持つ[ 関数 ]
___

■ ラムダ関数(名前なし関数)

方針としては [ その場で 1 度しか利用しない関数 ]は, 名前なし関数にする. 登録済みの関数は 未使用になったら GC で回収される.
    a = {}
    a[1] = { name="a", price=300 };
    a[2] = { name="b", price=100 };
    a[3] = { name="c", price=200 };


    table.sort( a, function ( a, b ) return a.price > b.price end ); 

    for i=1, #a do
       print( a[i].price );
    end
___

■ 文としての関数呼び出し

( 副作用を許すため, 関数呼び出しは文として実行可能 ) stat ::= functioncall // 戻り値はすべて捨てられる. Lua は Luaで書かれた関数もCで書かれた関数も呼べる
















NINJAIDX 18