Tserial (日本語)

Tserial について

Tserial は文字列をテーブルへ変換 ("シリアル化") および逆変換するためのライブラリです。これはゲームのセーブ/ロード機構 (ゲームの状態をファイルへ書き出します) およびマルチプレイヤー (ネットワークを経由してテーブルを渡すことができます) といった、いくつかの用途にて使用します。 Tserial は最大限使いやすくするために、テーブルを Lua スクリプトへ変換します。

ダウンロード

Dropbox から直接入手

連絡先

準備

  1. あなたのゲームのフォルダへ Tserial.lua を配置します。
  2. 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 またはエラーメッセージを返します (従ってプログラムは不正な文字列でクラッシュできなくなります)。

そのほかの言語