Show page source of 資料-lualibsについて #68769

= lualibsについて =

lualibs は最低限のライブラリしか用意されていない Lua でプログラミングをするためにあると便利な関数を提供するパッケージである.ConTeXt 由来.

(マニュアルに相当するものが見当たらないのですが,ご存知の方がいればリンクを追加して下さい.)

ConTeXt の Wiki でいくつか解説を見つけたのでリンクしておきます.

 * [http://wiki.contextgarden.net/Extensions_to_the_Lua_I/O_library io]
 * [http://wiki.contextgarden.net/String_Manipulation#l-lpeg.lua lpeg]
 * [http://wiki.contextgarden.net/String_Manipulation#l-string.lua string]
 * [http://wiki.contextgarden.net/table_manipulation table]

== 使い方 ==

Lua プログラムや `\directlua` 中に `require('lualibs')` と書くと全てのモジュールが読み込まれる.一部のモジュールのみを読み込みたい場合は `require('lualibs-<module name>')` と書く.LuaTeX-ja では luaotfload を読み込むと同時に lualibs も読み込まれるので,あまりロードを気にせずに使っても問題ないはず.

以下ではよく使う関数についての簡単な解説を書く(随時追加予定).

== lualibs-table ==
テーブル操作を行うライブラリ.

=== table.fastcopy(old) ===
テーブルの深いコピーを作成して返す.

 * old: コピーしたいテーブル.

Lua においてもテーブルの代入操作は主要な言語と同じく参照の代入となる.
{{{
> t = {1, 2}
> print(t)
table: 0x62cca0
> s = t
> print(s)
table: 0x62cca0
> s[2] = 3
> print(t[2])
3
}}}
そのため,テーブルの中身をコピーしようと思うと for 文を使って各要素をコピーする必要がある.しかし,テーブルの要素がまたテーブルである場合にも対応するためには再帰的に for 文を使う必要がある.table.fastcopy() はこの操作を実装したもの.
{{{
> t = {1, 2}
> print(t)
table: 0x6307a0
> s = table.fastcopy(t)
> print(s)
table: 0x642280
> s[2] = 3
> print(t[2])
2
}}}

=== table.tofile(filename,root[,name[,reduce[,noquotes[,hexify]]]]) ===
テーブルの中身を Lua でそのまま読み込み可能なテキスト形式でファイルに書き出す.

 * filename: 出力先のファイル名.
 * root: 出力したいテーブル.
 * name: 出力先のファイル内でのテーブルの名前.デフォルトは "t" で,`<name>={<root の中身>}` の形式で出力される."return" にすると `return {<root の中身>}` と出力される.
 * reduce: 値の出力を Lua で読める安全な形式にするかどうか.つまり,true なら %s,false なら %q になる.デフォルトは false.
 * noquotes: キーの出力形式の指定.true ならば `<key>=<value>`,false ならば `![<key>]=<value>` になる.デフォルトは false.
 * hexify: 数値の出力を16進にするかどうか.デフォルトは false.

便利な使い方として,Unix 系 OS ではデバッグ時に `table.tofile('/dev/stdout', <table>)` とすればテーブルの中身を端末に出力できる.