\n |
[ トップページ ]
[ ____CommandPrompt ]
[ ____JScript ]
[ ____MySQL ]
[ ____Cygwin ]
[ ____Java ]
[ ____Emacs ]
[ ____Make ]
[ ____Perl ]
[ ____Python ]
[ ____OpenGL ]
[ ____C# ]
[ ____StyleSheet ]
[ ____C++ ]
[ ____Winsock ]
[ ____Thread ]
[ ____VisualStudio ]
[ ____C ]
[ ____Win32API ]
[ ____Lua ]
[ ____PhotoShop ]
ヘッダ検索
■ 変数
Lua には 3種類の変数がある。
データ( 情報 )はすべて, テーブルという構造に格納される。
グローバル変数はグローバル用のテーブルにセットされる。
-- local と言わなければ, global
v = 10;
-- local 宣言で local変数扱い
local t = "test";
-- 値が代入されない変数は nil がセットされる。
local v;
POINT
変数に型はなく、任意の型のオブジェクトの場所だけを知っている存在。
動的にわりあてることができるが、
変数の型チェックをしてくれないため自前でする必要がある。
( Perl, Python 同様 )
静的わりつけ
Merit
実行前に チェック 可能
効率のよい cmp 作成可能
DeMerit
頻繁な型変換
param が異なる場合に複数の関数が必要.
動的わりつけ
Merit
Object の型をしらべて, 処理をするという動的な処理が可能
DeMerit
実効時にエラーが発生
param が異なる場合に複数の関数が必要.
ひとつの 変数(Symbol) に 文字列, 数値 を代入できる。
Java, C では変数に型情報があるため, 実行前にチェックができる。
スペルミスが素通りされる危険がある
■ ローカル変数
ローカル変数を定義するには local 文を使用する。
local i = 10;
local i, j = 10, 20;
SYNTAX
local name [= expression]
local namelist [= expressionlist]
POINT
ブロック内で local 文を使用する度に, 新たに変数が定義される。 ( C 同様 )
C と同じでブロック内のスコープになる。
i = 20 -- グローバル変数 i
do
local i = 10 -- 変数 i
do
local i = 7 -- これは別オブジェクトの 変数 i
-- 7
print (i)
end -- もっとも内側のブロックで変数は消滅する
-- 10
print (i)
end
for i=1, 10 do
local y; -- ここで新規定義
if y == nil then
y = 0
else
y = y + 1
end
done
■ グローバル変数
すべてのグローバル変数は、Luaの環境テーブルというテーブル内のフィールドとして存在する。
global変数とテーブルフィールドへアクセスする効果はメタテーブルによって変えられる.
各関数はそれぞれ独自に環境への参照を持つ.
関数が作られたとき、関数は、それが作られた関数から見える環境を受け継ぐ( ENV 同様
x == _env.x == gettable_event(_env, "x")
( MetaMethod を利用する )
Lua で グローバル変数を宣言( 代入 )する際は,
TblGbl( _G ) に格納される
mt = {};
mt.__newindex = function( t, n, v );
POINT
block do ... end に属さない local v は file scope になる
保守性のために, local にすること.
-- 未定義変数のチェック
if ( v ~= nil )
end
|
|
NINJAIDX 18