LuaのLua実装とLua変数-TLSA(一)


会社の業務はLuaまで役に立ち、nginxと結合して高性能のweb応用を実現し、この方面の知識を理解したいなら、Luaを理解して勉強して、大kaたちの指導を歓迎します.1.Lua紹介Luaは簡単なプログラミング言語であり、C++のモジュールを統合して自身の機能を拡張し、数百行以上のコードを使用して複雑な問題を解決することができるという利点がある.特徴は1.1.拡張性:Luaは最初から拡張しやすい言語として設計されており、多くの機能は外部ライブラリによって実現されており、C、C++、Javaなどの他のプログラミング言語とインタラクティブになりやすい.1.2. 簡潔:Luaは非常に簡潔ですが、機能が強く、学習しやすく、小規模な応用に適しています.1.3. 効率:Luaは実行効率が高い.1.4. 移植性:Luaは既存のシステムで実行できます.Luaスクリプトは一連のLuaコマンドを含む簡単なスクリプトであり、拡張子は.luaのテキストファイル.単一のコマンドまたは一連のコマンドからなるスクリプトファイルで、Luaではコードブロックと呼ばれています.コードブロック:1つの制御構造内、1つの関数体、または1つのchunk(変数が宣言されたファイルまたはテキスト列)を指す.2.LuaインストールはまずLua環境を構築し、後でプレゼンテーションを学ぶのに便利である.
# curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz
# tar zxvf lua-5.2.3.tar.gz 
# cd lua-5.2.3/src
# make linux
2.2よくある問題解決方法問題1:lua.c:67:31: error: readline/readline.h: No such file or directory lua.c:68:30: error: readline/history.h:No such file or directory解決方法:#yum install readline-devel問題2:make all SYSCLAGS="-DREA_USE_LINUX"SYSLIIBS="-Wl,-E-ldl-lreadline"make[1]:Entering directory`/root/lua-5.2.3/src' gcc -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `PC'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetflag'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetent'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `UP'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tputs'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgoto'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `tgetnum'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so: undefined reference to `BC'/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libreadline.so:undefined reference to`tgetstr'解決方法:ncursesライブラリをリンクしていないため、-lncursesを追加する必要があります.
# vim ./src/Makefile
linux:
 $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"
3. Lua変数Luaでは,変数は宣言を必要とせずに使用できるため,任意の場所で必要な変数を導入することができる.変数の追跡が難しくなります.これは,異なる関数で同じ名前の変数が使用されてデータが混乱しないように,特に注意する必要がある.また、nul、boolean、string、number、tableなどの変数のタイプを指定する必要はありません.変数のタイプは、与えられた値に依存します.初期化されていない変数にアクセスしてもエラーは発生しませんが、結果は空の値nilです.type関数を使用して変数のタイプを判断できます.次のようになります.
# ./lua
> value = 'www.ttlsa.com'
> print (type(value))
string
> value = 39514058
> -- ttlsa.com       Q 
> print (type(value))
number
3.1グローバル変数Lua変数のデフォルトはグローバルであり、変更しない限り、セッション全体で変更されません.グローバル変数を使用する場合、変数の前にg文字を付けるとより明確になります.ただし、できるだけローカル変数を使用します.3.2ローカル変数localを使用してローカル変数を作成します.グローバル変数とは異なり、ローカル変数は宣言されたコードブロック内でのみ有効です.ローカル変数を定義するには、初期値を設定するか、使用しなくてもいいです.例えば>local value 1>local vlaue 2='www.ttlsa.com' 4. Luaアノテーション構文単行アノテーション:--複数行アノテーション:--[--].Luaコマンドライン方式
usage: ./lua [options] [script [args]]
Available options are:
  -e stat  execute string 'stat'  //       Lua
  -i       enter interactive mode after executing 'script'  //      
  -l name  require library 'name'  //      
  -v       show version information  //      
  -E       ignore environment variables //      
  --       stop handling options
  -        stop handling options and execute stdin
# ./lua -e "print(type('www.ttlsa.com'))"
string
グローバル変数argはLuaのコマンドラインパラメータを格納する.実行する前に、Luaはすべてのパラメータを使用してargテーブルを構築します.スクリプト名インデックスは0で、スクリプトのパラメータは1から増加します.スクリプトの前のパラメータは-1から減少します.
> lua -e "sin=math.sin" script a b
arg   :
arg[-3] = "lua"
arg[-2] = "-e"
arg[-1] = "sin=math.sin"
arg[0] = "script"
arg[1] = "a"
arg[2] = "b"