Luaのデータ型

ページ名:Luaのデータ型
翻訳が中途半端につきTranslate
この記事には翻訳されていない箇所があります。
どなたでも翻訳にご協力いただくことができます。
◆原文へのリンク : w:c:dev:Lua_reference_manual
ご協力お願いします

目次

値と型[]

Luaは動的な型の言語である。つまり、変数は型を持たず、値が型を持つ。型定義の構文はない。すべての値は自分自身で型を保持している。Luaのすべての値はファーストクラスの値である。つまり、いかなる値も変数に格納でき、他の関数に引数で渡すことができ、戻り値として返すことができる。

Luaには8つの基本型がある・・・が、Scribuntoではその内の2つがオミットされて6つしか使えない。type()関数が現在の値の型を返す。

tostring()関数は値を文字列へ変換します。tonumber()関数は可能なら値を数値へ変換し、変換できないならnilを返します。その他のデータ型へ変換する明示的な関数はありません。

数値は、文字列が期待される場所では自動的に文字列へ変換されます。たとえば文字列連結演算子で。文字列が算術演算子に使用される場合、tonumber()によって数値へ変換されます。真偽値が期待される場所では、nil以外の全ての値はtrueとして扱われます。

nil[]

"Nil"はそのまんまnil値の型である。その主な性質は他のいかなる値とも異なることであり、通常、意味のある値がないことを表す。

Stringに変換すると、それは数字ではなく"nil"の文字を返す。booleanではfalseを返す。

boolean[]

booleanはfalseとtrueの値を持つ型である。nilとfalseは共に条件判断で偽となり、他の値は真となる。

Stringに変換すると、それは数字ではなく"false"か"true"の文字を返す。他の言語でfalseを返す空文字列と0もLuaではtrueを返す。

string[]

Luaのstringsは8bit形式の文字列の型である。詳しい事はこちらへどうぞ。

number[]

Luaのnumberは実数(double)を表現する。整数で-9007199254740992から9007199254740992までを表現できるが、それを超えるとエラーになってしまう。

数値は小数の区切りとして「.」を使用して 123456.78 のように記述します。指数表記を使用して 1.23e-10、123.45e20あるいは1.23E5のように表現することも出来ます。整数は0xを使用した16進数記法で、0x3Aのようにも記述できます。

非数(NaN)および正負の無限大は正しく保持し扱うことができますが、Luaはこれらに対応するリテラルを提供していません。定数math.hugeは正の無限大であり、1/0のような除算も同様です。また、手っ取り早く非数を生成する方法として0/0が使われる場合があります。

Note booleanでは他の言語がfalseを返す0もtrueを返す。文字列へ変換される場合、有限の数値は小数で、可能なら指数表記で表現される。非数は "nan" または "-nan"、無限大は "inf" または "-inf" となる。

table[]

Luaのtableは連想配列であり、Luaの唯一のデータ構造であり、 普通の配列の他、記号表、集合、レコード、グラフ、ツリーなどを表現するために使われる。

「LuaのTableは、Array型+Hash型という混合型なんだよ!!!」↑きもちわるいです・・・

Tables are created using curly braces. The empty table is {}. To populate fields on creation, a comma- and/or semicolon-separated list of field specifiers may be included in the braces. These take any of several forms:

  • [expression1] = expression2 uses the (first) value of expression1 as the key and the (first) value of expression2 as the value.
  • name = expression is equivalent to ["name"] = expression
  • expression is roughly equivalent to [i] = expression, where i is an integer starting at 1 and incrementing with each field specification of this form. If this is the last field specifier and the expression has multiple values, all values are used; otherwise only the first is kept.

The fields in a table are accessed using bracket notation, e.g. table[key]. String keys that are also valid names may also be accessed using dot notation, e.g. table.key is equivalent to table['key']. Calling a function that is a value in the table may use colon notation, e.g. table:func( ... ), which is equivalent to table['func']( table, ... ).

A sequence is a table with non-nil values for all positive integers from 1 to N and no value (nil) for all positive integers greater than N. Many Lua functions operate only on sequences, and ignore non-positive-integer keys.

Unlike PHP or JavaScript, however, any value except nil and NaN may be used as a key and no type conversion is performed. These are all valid and distinct:

-- テーブルt = {}t["foo"] = "foo"t.bar = "bar"t[1] = "一"t[2] = "二"t[3] = "三"t[12] = "数値12"t["12"] = "文字列「12」"t[true] = "真値true"t[tonumber] = "関数もキーとして使えます"t[t] = "テーブルは自分自身をキーとして使えます"-- 上のテーブルとおおよそ同等なテーブルt2 = { foo = "foo", bar = "bar", "一", "二", [12] = "数値12", ["12"] = "文字列「12」", "三", [true] = "真値true", [tonumber] = "関数もキーとして使えます",}t2[t2] = "テーブルは自分自身をキーとして使えます"

同様に、nil以外のどんな値でもテーブルの値として入れることができます。nilを表に入れるというのは、対応するキーを削除するのと同じことです。また、それまでに何も値を設定されていないキーの値を参照するとnilが返されます。

Lua言語ではテーブルは暗黙に複製がつくられることはありません。例えばある関数が引数としてテーブルデータを受け取って、その関数がそのテーブルデータに対して何らかの変更を加えるとすれば、その変更はそのまま関数を呼び出し側からも見えてしまうということです。

テーブルデータを文字列に変換すると既定では "table" という文字列になるだけですが、__tostringメソッドをオーバラーライド(上書き)することで、この結果を変えることができます。

中身が空のテーブルを含めてすべてのテーブルデータはbooleanとしてはtrueとして扱われます。

全角の生キーは控えましょう。引用元:Qlitaの記事

a = {ァ = @} -- 0x83 0x40 (@)--a = {ア = A} -- 0x83 0x41 (A)--a = {セ = Z} -- 0x83 0x5A (Z)a = {ゼ = [} -- 0x83 0x5B ([)a = {ソ = \} -- 0x83 0x5C (\)a = {ゾ = ]} -- 0x83 0x5D (])a = {タ = ^} -- 0x83 0x5E (^)--a = {ダ = _} -- 0x83 0x5F (_)a = {チ = `} -- 0x83 0x60 (`)--a = {ヂ = a} -- 0x83 0x61 (a)--a = {ホ = z} -- 0x83 0x7A (z)a = {ボ = {} -- 0x83 0x7B ({)a = {ポ = |} -- 0x83 0x7C (|)a = {マ = }} -- 0x83 0x7D (})a = {ミ = ~} -- 0x83 0x7E (~) --a = {ム = 0} -- 0x83 0x80 (以下ASCII外なので全部OK) --a = {メ = 0} -- 0x83 0x81 --a = {ぁ = 0} -- 0x82 0x9F --a = {あ = 0} -- 0x82 0xA0 --a = {◯ = 0} -- 0x81 0xFC (終わり)

function[]

Functions in Lua are first-class values: they may be created anonymously, passed as arguments, assigned to variables, and so on.

Functions are created using the function keyword, and called using parentheses. Syntactic sugar is available for named functions, local functions, and functions that act like member functions to a table. See Function declarations and Function calls below for details.

Lua functions are closures, meaning that they maintain a reference to the scope in which they are declared and can access and manipulate variables in that scope.

Like tables, if a function is assigned to a different variable or passed as an argument to another function, it is still the same underlying "function object" that will be called.

When converted to a string, the result is "function".

Wikiaでは使われない型[]

ユーザーデータは任意のCのデータをLuaの変数に格納するために用意された。この型は生のメモリブロックに相当し、代入と等価比較を除いて、Luaでは演算が定義されていない。しかしながら、メタテーブルを用いることで、プログラマはユーザーデータに対する演算を定義することができる。ユーザーデータはLua内で作ったり変更することはできず、CのAPIを通してのみ可能である。これは完全にホストプログラムに所有されたデータであることを保証する。

WikiScribuntoではセキュリティの問題で使えない。

スレッド は実行されているそれぞれのスレッドを表現し、コルーチンを実装するために使われる。 LuaのスレッドとOSのスレッドを混同しないように。 Luaはスレッドをサポートしないシステム上でもコルーチンをサポートする。

Scribuntoではマイナーな事もあり使えない。

特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用可能です。

シェアボタン: このページをSNSに投稿するのに便利です。


最近更新されたページ

左メニュー

左メニューサンプル左メニューはヘッダーメニューの【編集】>【左メニューを編集する】をクリックすると編集できます。ご自由に編集してください。掲示板雑談・質問・相談掲示板更新履歴最近のコメントカウン...

電球ボトル

この記事は種族検索のためのページです。Tardis"元人間の物人の遺伝子は物人の世界から来た同族の遺伝子と全く同じだったの。" - Tardis下記は種族が同じキャラクターのページへのリンク一覧です。...

電球

この記事は種族検索のためのページです。Tardis"元人間の物人の遺伝子は物人の世界から来た同族の遺伝子と全く同じだったの。" - Tardis下記は種族が同じキャラクターのページへのリンク一覧です。...

闇の中心

闇の中心EnglishCenter of Darkness 属性 DemonUnknown目次1 属性解説2 闇の中心の関係者2.1 幽閉されたナイトメア種2.2 幽閉された荒らし3 関連項目属性解説...

この記事は種族検索のためのページです。Tardis"元人間の物人の遺伝子は物人の世界から来た同族の遺伝子と全く同じだったの。" - Tardis下記は種族が同じキャラクターのページへのリンク一覧です。...

野生の毒沼

野生の毒沼EnglishVenomous wild swamp 属性 VenomFeral地理情報地名の由来属性からの連想属性解説[]Venom - A deadly essence that can...

部分フィルタ

部分フィルタ上フィルタオブジェクト部分フィルタとは、部分フィルタに追加されたフィルタ効果を画面の一部分のみに反映させるフィルタオブジェクトの1つである。※フィルタによっては正しく動作しません。目次1 ...

輪郭系エフェクト

輪郭系エフェクト上フィルタオブジェクトこの記事では、「オブジェクトの輪郭」を変更する系のフィルタオブジェクトについて説明する。目次1 凸エッジ1.1 ◇幅1.2 ◇高さ1.3 ◇角度2 エッジ抽出2....

設定ダイアログ/トラックバー

設定ダイアログ/トラックバー上設定ダイアログ目次1 移動の種類2 基本の移動方法2.1 直線移動2.2 曲線移動2.3 加減速移動2.4 瞬間移動2.5 中間点無視2.6 移動量指定2.7 ランダム移...

設定ダイアログ

設定ダイアログ上拡張編集オブジェクトの追加やオブジェクト自体をダブルクリックすることで設定ダイアログが表示されます。表示中にダブルクリックで閉じることも出来ます。目次1 操作方法2 右クリックメニュー...

色関係エフェクト

色関係エフェクト上フィルタオブジェクトこの記事では、色関係のフィルタオブジェクトについて説明する。目次1 色調補正1.1 ◇明るさ1.2 ◇コントラスト1.3 ◇色相1.4 ◇輝度1.5 ◇彩度1.6...

自演コメント風スクリプト

Aviutl 自演コメント風スクリプト anm 種類使用種別アニメーション効果動作種別文字列絵画外部情報作者gometh公開日2017/12/2自演コメントとは、gometh氏によるanm拡張子のAv...

直方体展開

Aviutl 直方体展開 anm 種類使用種別アニメーション効果動作種別3D絵画外部情報作者ティム公開日2011/5/27直方体展開とは、ティム氏によるanm拡張子のAviutlスクリプトの1つである...

盗聴器

この記事は種族検索のためのページです。Tardis"元人間の物人の遺伝子は物人の世界から来た同族の遺伝子と全く同じだったの。" - Tardis下記は種族が同じキャラクターのページへのリンク一覧です。...

液状荒野

液状荒野EnglishLiquid wilderness 属性 SiltPlague地理情報地名の由来属性からの連想属性解説[]Silt - Weaker version of Stone in so...

歪み系エフェクト

歪み系エフェクト上フィルタオブジェクトこの記事では、歪み関係のフィルタオブジェクトについて説明する。目次1 ミラー1.1 ◇透明度1.2 ◇減衰1.3 ◇境目調整1.4 ◇ミラーの方向1.5 ◇中心の...

極座標変換+ぼかしミラー

Aviutl 極座標変換+ぼかしミラー anm 種類使用種別アニメーション効果動作種別基本機能の拡張、2D絵画、3D絵画外部情報作者ティム公開日2012/3/4極座標変換+ぼかしミラーとは、ティム氏に...

本、辞書

この記事は種族検索のためのページです。Tardis"元人間の物人の遺伝子は物人の世界から来た同族の遺伝子と全く同じだったの。" - Tardis下記は種族が同じキャラクターのページへのリンク一覧です。...