Luaリファレンス 要注意点 ~型~

型は全部で8種

  • nil
  • boolean(ブール値)
  • number(数値)
  • string(文字列)
  • userdata(ユーザ定義型)
  • function(関数)
  • thread(スレッド)
  • table(テーブル)

    型を知るには
    type("Hello World")  --> string
    type(print)          --> function
    
    のようにtype関数を利用する。

0は真

  • boolean, true, false
    0と""(空文字)はtrueなので注意!!

    C言語やPerlのクセが染み付いていると、強く意識していないと、よく間違える。

    1と0のスイッチは、
    a = 1
    a = 1 - a -- 1→0の切り替え
    
    みたいな感じ。
    以下のように勘違いしやすいので注意。
    a = 1
    a = not a -- 数値→falseへと変貌するので注意
    

10進数での文字コード表記

printf("aaa\xAbbb"); -- 多くの言語は文字コードを16進数表記

これが改行と同様という言語は多いが、

print("aaa\10bbb"); -- Lua言語は文字コードを10進数で書く

と珍しい表記をする。

ヒアドキュメント

local page = [[
<html>
<body>
</body>
</html>
]]

このように[[ と ]]で挟まれた文字列の最初の文字の改行は自動的に削除される。

文字列型と数値型の暗黙の変換

  • 文字列に対して、算術演算子(+ - * / などの数値計算系)がほどこされた場合、文字列は数値への変換が試みられる。
    変換できなければエラーとなる。
    "10" + 1 --> 11
    

  • 数値に対して、文字列連結演算子など、「文字列が期待される場所」に数値がある場合、文字列へと変換される。
    変換できなければエラーとなる。
    10..31  --> 1031
    print("10"+1) --> print(11) ⇒ print("11") 
    

    しかし、どのみちPerlとは異なり、
    if ( 10 == "10" ) --> false
    
    false になってしまうので、自動変換は、あまり期待出来ない
    明示的に変換する際には、tonumber, tostring を利用すること。

文字列の\0と長さ

local a = "Hello"
print(#a) --> 5

print("Good\0bye")  --> \0というNULL相当の文字コードを入れ込むことも出来る。表示上はGoodとなる。
print(#"Good\0bye")  --> 8。

\0が途中で出現したからといって、残りのバイトが切り捨てられたりはしない。
要するに文字列としてprintfする際には、文字列表示上は\0まで表示されることとなるが、
データとしては\0の後も全て持っている。

浮動小数の整数部分を得る。x % 1

local x = 3.32
print(x % 1) --> 0.32 となる。

少数第2位以下を得るなら

local x = 3.4566
print(x % 0.01) --> 0.006599999999997 となる。


整数や浮動小数点のズレ(比較ズレ、加算ズレ)

Luaの数値は全てdouble型なので、数値の精度を保つのに難がある。
数値の加算や減算をした結果がdouble型で表現可能な精度を超えると、
「整数であっても」ズレが発生する。

但し、一般的なLuaの利用シーンでは、気にする必要はほとんどない。


トップ   差分 履歴 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-23 (土) 00:00:00