*Luaリファレンス 要注意点 ~型~ [#fce7251d]

**型は全部で8種 [#ucf07776]
-nil
-boolean(ブール値)
-number(数値)
-string(文字列)
-userdata(ユーザ定義型)
-function(関数)
-thread(スレッド)
-table(テーブル)
~
~
型を知るには
#sh(lua){{
type("Hello World")  --> string
type(print)          --> function
}}
のようにtype関数を利用する。~
~


**0は真 [#cc8ee498]
-boolean, true, false~
''0と""(空文字)はtrueなので注意!!''~
~
C言語やPerlのクセが染み付いていると、強く意識していないと、よく間違える。~
~
1と0のスイッチは、
#sh(lua){{
a = 1
a = 1 - a -- 1→0の切り替え
}}
みたいな感じ。~
以下のように勘違いしやすいので注意。
#sh(lua){{
a = 1
a = not a -- 数値→falseへと変貌するので注意
}}

**10進数での文字コード表記 [#pabae49a]
>~
#sh(cpp){{
printf("aaa\xAbbb"); -- 多くの言語は文字コードを16進数表記
}}
これが改行と同様という言語は多いが、
#sh(lua){{
print("aaa\10bbb"); -- Lua言語は文字コードを10進数で書く
}}
と珍しい表記をする。

**ヒアドキュメント [#ode17572]
>~
#sh(lua){{
local page = [[
<html>
<body>
</body>
</html>
]]
}}
このように[[
と
]]で挟まれた文字列の''最初の文字の改行''は自動的に削除される。~

**文字列型と数値型の暗黙の変換 [#k1880dfb]
-''文字列に対して、算術演算子''(+ - * / などの数値計算系)がほどこされた場合、文字列は数値への変換が試みられる。~
変換できなければエラーとなる。~
#sh(lua){{
"10" + 1 --> 11
}}
~
-''数値に対して、文字列連結演算子''など、「文字列が期待される場所」に数値がある場合、文字列へと変換される。~
変換できなければエラーとなる。~
#sh(lua){{
10..31  --> 1031
print("10"+1) --> print(11) ⇒ print("11") 
}}
~
しかし、どのみちPerlとは異なり、
#sh(lua){{
if ( 10 == "10" ) --> false
}}
は ''false'' になってしまうので、''自動変換は、あまり期待出来ない''。
~
明示的に変換する際には、tonumber, tostring を利用すること。~
~
**文字列の\0と長さ [#kd8af6ff]
>~
#sh(lua){{
local a = "Hello"
print(#a) --> 5

print("Good\0bye")  --> \0というNULL相当の文字コードを入れ込むことも出来る。表示上はGoodとなる。
print(#"Good\0bye")  --> 8。
}}
\0が途中で出現したからといって、残りのバイトが切り捨てられたりはしない。~
要するに文字列としてprintfする際には、文字列表示上は\0まで表示されることとなるが、~
データとしては\0の後も全て持っている。~
~
**浮動小数の整数部分を得る。x % 1 [#fcfaa4b3]
>~
#sh(lua){{
local x = 3.32
print(x % 1) --> 0.32 となる。
}}
少数第2位以下を得るなら
#sh(lua){{
local x = 3.4566
print(x % 0.01) --> 0.006599999999997 となる。
}}
~
**整数や浮動小数点のズレ(比較ズレ、加算ズレ) [#r851bcee]
>~
''Luaの数値は全てdouble型''なので、数値の精度を保つのに難がある。~
数値の加算や減算をした結果がdouble型で表現可能な精度を超えると、~
「整数であっても」ズレが発生する。~
~
但し、一般的なLuaの利用シーンでは、気にする必要はほとんどない。

トップ   差分 履歴 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS