ABCDEFGHIJKLMNOPQRSTU
1
機能比較項目UWSCLua
2
3

他ファイルの実行EXEC()os.execute
4
COM オブジェクトCREATEOLEOBJ()require( "luacom" )
luacom.CreateObject()
5
DLL定義


DEF_DLL 関数名(型, 型, ...): 戻り型: DLL名require( "alien" )
local mb = alien.User32.MessageBoxA
mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' }
6
DLL関数呼び出し関数名(引数)mb(0, "Hello World!", "test", 64)
7
スレッドthread 関数名()スレッドという用語はあるが別の意味
8
キー、マウス制御kbd(), mmv(), btn()
Win32API
9
継承クラスなしあり
10
コールバックなし可能
11
12
言語仕様比較UWSCLua
13
14
15
コメント1行コメント//# 行頭でのみコメント扱い
-- どこでも行末までコメント
16
複数行コメント

なし。 textblock で代替-- [[
  複数行コメント 
  角括弧で囲まれた部分がコメントになる
]]
17
18
改行コード途中での改行行1 _
行2
自由。
ただし、 ( で始まる場合は連続しない。
19
マルチステートメント
20
21
出力テキスト表示print "文字列"print("文字列1", "文字列2", ...)
22
23
変数明示的な定義PUBLIC 変数
DIM 変数       // ブロック内でローカル変数
変数       --常にグローバル
local 変数   -- ローカル変数の場合
24
代入による定義変数 = 値変数 = 値
25
代入前の変数参照するとエラーnil
26
スコープ関数外はグローバル、内はローカル関数外はグローバル、内はローカル
ただし、ローカル指定しないとグローバル変数になる
27
28
定数NULLNULLNIL
29
16進数$数値0x数値
30
指数なし数値e-2
数値E1
31
文字列"文字列""文字列"  # 制御文字が処理される
'文字列'
[[文字列]]  # 制御文字はそのまま表示
[==[文字列]==]  # また、複数行可能
32
文字列中の特殊文字





<#CR>   // 改行コードを表す
<#DBL>  // ダブルコーテイション
<#TAB>  // タブを表す
\a' (bell),
'\b' (backspace),
'\f' (form feed),
'\r' (carriage return),
'\v' (vertical tab),
'\\' (backslash),
'\'' (apostrophe [single quote]).
\n
\"
\t
33
文字列処理の比較結果
34
LENGTH("mojiretu")string.len("mojiretu")
#"mojiretu"
8
35
COPY("mojiretu", 3, 3)string.sub("mojiretu", 3, 5)jir
36
POS("mojiretu", "e")string.find("mojiretu", "e")6
37
REPLACE("mojiretu", "ji", "字")string.gsub("mojiretu", "ji", "字")mo字retu
38
39
配列配列の宣言DIM 配列[]
DIM 配列[][]
配列 = {}
40
配列宣言+代入DIM 配列[] = 1, 2, "3"配列 = {1, 2, "3"}
41
配列要素への代入配列[0] = 1配列[1] = 1
42
添え字添え字は 0 から添え字は 1 から
43
44
連想配列連想配列への複数代入なし配列 = { keyA = 1, keyB = 2, keyC = 3 }
45
連想配列変数[キー] = 1配列["キー"] = 1
配列.キー = 1
46
47
ソートQSORT(配列)table.sort(配列)
48
末尾に追加
配列["新規キー"] = 値table.insert(配列, データ)
49
位置を指定して追加なしtable.insert(配列, 添え字, データ)
50
削除dummy = 変数[キー, HASH_REMOVE]削除データ = table.remove(配列, 添え字)
添え字を省略した場合は最後のデータ
51
52
53
演算子





算術演算子



+ 加算
- 減算
* 積算
/ 除算
mod 剰余

+ 加算
- 減算
* 積算
/ 除算
% 剰余
^ 累乗
54
関係演算子



< 小さい
> 大きい
<= 小さいか等しい
>= 大きいか等しい
=  等しい
<> 等しくない
< 小さい
> 大きい
<= 小さいか等しい
>= 大きいか等しい
== 等しい
~= 等しくない
55
論理演算子and かつ
or  または
!   でない
and かつ
or  または
not でない
56
文字列連結演算子"hoge" + "hoge"
"hoge".."hoge"
57
長さ演算子なし。 length() 関数を使う#
ただし、nil を終端とみなす
58
演算子の優先順位




( )
!       (論理否定
*, /, MOD
+, -
>, <, =, >=, <=, <>
AND
OR, XOR
^
not # 単項-
* / %
+ -
..
< > <= >= ~= ==
and
or
優先順位高い





優先順位低い
59
60
ブロックスクリプトの実行単位ファイル
ファイル名.uws
チャンク
{ 文 }
61
ブロック単独ブロックはない
do ~ end
62
スコープ


module, 関数内はローカルスコープはブロックで区切られるが、変数はローカル宣言しない限りグローバル変数となる。
ローカル変数の定義は以下。
local 変数
63
64
制御構文if 単文if 条件式1 then 処理# 複文と同じだが、1行でも書ける。
if 条件式 then 処理 end
65
if 複文



ifb 条件式1
  処理
elseif 条件式2
  処理
else
  処理
endif
if 条件式1 then
  処理
elseif 条件式2 then
  処理
else
  処理
end
66
gotoなしgoto ラベル     # Lua 5.2 から
::ラベル::
67
ループの break




break 段数
// 段数文のループを抜ける。省略可能。
  do
    break
  end
# break はブロック末尾でのみ使用可能。
# そのほかの場所で書く場合は do~end でブロックを書く必要がある。
# 1行で次のように書くことができる。
do break end
68
whilewhile 条件式
  繰り返す処理  
wend
while 条件式 do
  繰り返す処理
end
69
repeatrepeat
  繰り返す処理
until  条件式
repeat
  繰り返す処理
until  条件式
70
for




// for 初期値, 終了値, ステップ数
// ステップは省略可

for i = 0 to 2 step 1
  処理
next
# for 初期値, 終了値, ステップ数
# ステップは省略可

for i = 0, 2, 1 do
  処理
end
71
for (配列)



for i = 0 to length(配列)-1
  print 配列[i]
next
for i, v in ipairs(配列) do
  print(i, v)
end
# 配列の場合    ipairs()
# 連想配列の場合 pairs()
72
73
74
関数





関数定義(戻りあり)



FUNCTION 関数名( 引数 )
  処理
  RESULT = 戻り値
FEND

# Var で参照定義
function 関数名(引数)
  処理
  return 戻り値1, 戻り値2
end

関数名 = function(引数) でもよい
75
関数定義(戻りなし)

PROCEDURE 関数名( 引数 )
  処理
FEND
function 関数名(引数)
  処理
end
76
77
複数の戻り値(関数側)


PROCEDURE 関数名( var 引数1, var 引数2 )
  引数1 = 戻り値1
  引数2 = 戻り値2
FEND
function 関数名(引数)
  処理
  return 戻り値1, 戻り値2
end
78
複数の戻り値(呼び出し側)関数名( 引数1, 引数2 )
変数1, 変数2 = 関数名()
79
可変引数


関数定義で代入すると、省略できるfunction 関数名(...)
  print(...)
  a={...}     # 可変引数→連想配列
end
80
81
82
以下、Lua のみの仕様
83
84
コルーチン













コルーチンは関数の途中で処理を中断し、また関数を呼ぶと前回中断したところから
処理を再開できる仕組み。

function func()
  coroutine.yield "処理中断1"
  coroutine.yield "処理中断2"
  coroutine.yield "処理中断3"
end

-- コルーチンを作成
local co = coroutine.wrap(func)

print(co()) -- 処理中断1
print(co()) -- 処理中断2
print(co()) -- 処理中断3
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100