Lua-<2>-タイプと値
3986 ワード
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
変数には事前定義されたタイプがなく、各変数にはいずれかのタイプの値が含まれる場合があります.
print(type(a)) --> nil ('a' is not initialized)
a = 10
print(type(a)) --> number
a = "a string!!"
print(type(a)) --> string
a = print -- yes, this is valid!
a(type(a)) --> function
上の最後の2行に注意して、functionを使用して他の値を使用するように使用することができます.一般的に同じ変数が異なるタイプの値を表すと混乱するので、使わないほうがいいですが、特にnilなどの便利さをもたらすことができます.
4 0.4 4.57e-3 0.3e12 5e+20
a = "one string"
b = string.gsub(a, "one", "another") -- change string parts
print(a) --> one string
print(b) --> another string
stringは他のオブジェクトと同様に、Luaは自動的にメモリの割り当てと解放を行い、1つのstringは1文字だけを含んでも1冊の本を含んでもよく、Luaは長い文字列を効率的に処理することができ、1 MのstringはLuaではよく見られる.文字列は、一重引用符または二重引用符で表すことができます.
a = "a line"
b = 'another line'
スタイルを統一するには、2つの引用符がネストされていない限り、1つを使用することが望ましい.文字列に引用符が含まれている場合は、エスケープ記号を使用して表すこともできます.Luaのエスケープシーケンスは次のとおりです.
\a bell
\b back space --
\f form feed --
newline --
\r carriage return --
\t horizontal tab --
\v vertical tab
\\ backslash -- "\"
\" double quote --
\' single quote --
\[ left square bracket --
\] right square bracket --
[[...]]も使用できます.文字列を表します.この形式の文字列は、複数の行を含んでもよいし、ネストしてもよいし、エスケープシーケンスを説明しないし、最初の文字が改行であれば自動的に無視される.この形式の文字列は、コードを含むのに便利です.
実行すると、Luaはstringとnumbersの間で自動的にタイプ変換を行い、文字列が算術オペレータを使用するとstringは数値に変換されます.
print("10" + 1) --> 11
print("10 + 1") --> 10 + 1
print("-5.3e - 10" * "2") --> -1.06e-09
print("hello" + 1) -- ERROR (cannot convert "hello")
逆に、Luaがstringを望んで数字にぶつかると、数字はstringに変わります.
print(10 .. 20) --> 1020
..
はLuaでは文字列コネクタであり、1つの数字の後ろに..
と書く場合は、解釈の誤りを防ぐためにスペースを付けなければならない.文字列と数字は自動的に変換できますが、両者は異なり、10==「10」のような比較は永遠に間違っています.stringを明示的に数値に変換する必要がある場合は、関数tonumber()を使用し、stringが正しい数値でない場合はnilを返します.
line = io.read() -- read a line
n = tonumber(line) -- try to convert it to a number
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
逆に、tostring()を呼び出して数字を文字列に変換することができます.この変換は常に有効です.
print(tostring(10) == "10") --> true
print(10 .. "" == "10") --> true