Tserial (日本語)
Contents
Tserial について
Tserial は文字列をテーブルへ変換 ("シリアル化") および逆変換するためのライブラリです。これはゲームのセーブ/ロード機構 (ゲームの状態をファイルへ書き出します) およびマルチプレイヤー (ネットワークを経由してテーブルを渡すことができます) といった、いくつかの用途にて使用します。 Tserial は最大限使いやすくするために、テーブルを Lua スクリプトへ変換します。
ダウンロード
連絡先
- Taehl - SelfMadeSpirit@gmail.com
準備
- あなたのゲームのフォルダへ Tserial.lua を配置します。
- main.lua の先頭へ、
require"Tserial"
の行を追加します。
よくある質問と回答
- Q) Tserial は別のテーブルにある入れ子テーブルを圧縮できますか?
- A) はい、できます。どのような深度数の入れ子テーブルであっても申し分ありません(タイル・マップのようなものでも適しています)。しかしながら、 Tserial は自己参照テーブルを扱うことができません (
t={t}
またはt={{1,2,3},{t}}
など)。
- Q) Tserial で扱えるデータ型は?
- A) 適切に扱えるものはシリアル化された文字列、数値、ブール値、およびテーブルです。テーブルはこれらの型にあるキーまたは値のいずれかにある任意のものを保有している場合があります。標準では、 Userdata および関数はシリアル化することができませんが、少しの追加作業にて対応することができます。
- Q) Userdata (ユーザ・データ) をシリアル化するには?
- A) この目的のために Tserial.pack の第二引数は使用されます。 true であれば、 Tserial は Userdata および関数を読み飛ばします。関数であれば、関数はデータをシリアル化するために使用されます。テーブルであれば、テーブルはシリアル化を行うための索引として使用されます。
関数
Tserial.pack
Tserial.pack(t, drop, indent)
文字列をテーブルへシリアル化します。テーブルの再生成を行った Lua スクリプトの文字列を返します。
table t
- シリアル化を行うテーブル。自己参照はしないでください。
table drop
- Userdata および関数のような、シリアル化できないデータに遭遇したときの挙動。未指定時、 Tserial は前述のものに遭遇したときはエラーを投げます。 drop が関数である場合は、それは単一引数(データ)にて呼び出されて要求された文字列を返します (従って、自己シリアル化を行う関数を提供することができます)。
boolean indent
- true ならば、改行および字下げによる「人間が理解できる形式」で出力します。それ以外は、文字列は全て一行にて記述されます (結果として大きさは小さくなります)。
Tserial.unpack
Tserial.unpack(s, safe)
シリアルをテーブルへ逆変換します。文字列から再生成を行ったテーブル (または safe が true であり奇形文字列が与えられた時に nil およびエラーメッセージ) を返します。
string s
- テーブルへ変換するシリアル。
string safe
- true ならば、文字列とは無関係の部品は削除され、テーブルだけ残ります (これは信頼できない文字列の展開時に変態的なコードが実行されることを阻止します)。さらに奇形テーブルの発生時にエラーを投げるのではなく、 nil またはエラーメッセージを返します (従ってプログラムは不正な文字列でクラッシュできなくなります)。