Lua 5.3——各種変数と値を素早く把握する


Q:Luaの基本変数タイプは?
A:
nil, boolean, number, string, userdata, function, thread, and table.
type()は変数のタイプを取得できます.
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

Q:Luaの中で何が本当なのか、何が偽物なのか.
A:falseおよびnil偽と判定され、その他の値はすべて真と判定されます.ここで特に注意したいのは、C言語とは異なり0真と判定されることです.
Q:Luaにおけるエスケープシーケンス?
A:Cと同じです.
a bellb back spacef form feed newliner carriage returnt horizontal tabv vertical tabbackslashdouble quotesingle quote[left square bracket]right square bracketddd ASCIIコードを使用して文字を指定
Q:Luaではどのように文字列を作成しますか?
A:1、使用""または''
a = "string"
b = 'another string'

2、使用[[...]]
--[[                       "\"   ,
              "]]"。              。]]
page = [[
a
b
c
]]

3、使用..2つの値を1つの全体の文字列に接続することができ、
--[[   ,   ".."      ".."         。
       ".."     "."        。
          ,".."             。]]
print(10 .. 20)
print("Hello" .. "World")

Q:Luaの数字と文字列の変換方法は?
A:luaは、演算演算演算に関連する操作を前提として、実行中に文字列を動的に数値に変換することをサポートします.
print("10" + 1)           --> 11
print("hello" + 1)        --> ERROR (cannot convert "hello")

luaはまた、ここで文字列が必要であることを発見し、数値が与えられることを前提として、実行中に数値を文字列に動的に変換することもサポートします.
print(10 .. 20)               --> 1020
print(10 .. "" == "10")       --> true

より規範的な変換方式はtonumber()およびtostring()を使用することであり、
> print(type(tonumber(“10”))) number > print(type(tostring(10))) string
Q:Luaのtableは何ですか.
A:配列に似ていますが、配列よりも強力です.tableには任意のデータを格納し、keyとして数字または文字列を使用できます.tableのストレージスペースはダイナミックで、任意にメンバーを追加できます.
Q:tableの作成と使用方法
A:
--       table,    a  。
a = {}
-- table            "nil"。
print(a[1])    --> nil

--   table         。
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday"}
--       table。
--[[   !table    1  。          0          0   ,
       Lua          1     ,          。]]
print(days[1])   --> "Sunday"

--   table               。
coor = {x = 10, ["y"] = 20, [21] = 300}
--          table。
--[[   !  coor[1]       。
            1    ,  coor["x"]  coor[1]。]]
print(coor["x"])    --> 10
print(coor["y"])    --> 20
print(coor[1])    --> nil
print(coor[21])    --> 300

--     table。
polyline = {color="blue", thickness=2, npoints=4,
             {x=0,   y=0},
             {x=-10, y=0},
             {x=-10, y=1},
             {x=0,   y=1}
           }    -- polyline[1] polyline[4]    4   table。
print(polyline[2].x)    --> -10

Q:a{x},a{“x”},a{[x]},a{[“x”]},a.x,a.”x”,a[x],a[“x”],a.x,a.”x”?
A:
a = {"x" = one}    --> ERROR
x = 2
a = {x = "one", "two", "three"}
print(a["x"])    --> one
print(a[1])    --> two
print(a[x])    --> three
print(a.x)    --> one
print(a."x")    --> ERROR
a = {["x"] = "one", "two", [x] = "three"}
--           。

まとめ:ないa{"x"}この使い方;ありませんa."x"この使い方;a["x"]a.xと同じ;a{x}a{["x"]}と同じ;{"red", "green", "blue"}{[1]="red", [2]="green", [3]="blue"}と同じ.
Q:「table」の各連続数字索引の要素をどのように遍歴しますか?
A:
a = {1, 2, x = 7, 3, [9] = 100}

--[[ ipairs()     ,table key value。
     ipairs()        ,  "[9]",
               ,  "x"。]]
for i,val in ipairs(a) do
  print("[" .. i .. "] = ", val)
end
--[[ the result.
[1] =   1
[2] =   2
[3] =   3
]]

-- table.unpack  table value。
--[[ table.unpack()    table value。
     table.unpack()        ,  "[9]",
               ,  "x"。]]
print(table.unpack(a))
--[[ the result.
1    2    3
]]

Q:「table」のすべての要素をどのように遍歴しますか?
A:
a = {1, 2, x = 7, 3}

-- pairs()     ,table key value。
for i,val in pairs(a) do    -- pairs()  table    key value。
  print("[" .. i .. "] = ", val)
end
--[[ the result.
[1] =   1
[2] =   2
[3] =   3
[x] =   7
[9] =   100
]]

追加:
1、lua変数に格納されている文字列の任意の文字は、プログラム実行中に変更できません.
a = "one string"
b = string.gsub(a, "one", "another")  --       one   another
print(a)       --> one string
print(b)       --> another string

2、数字と文字列は自動的に変換できるが、数字と文字列は同等ではない.
print(10 == "10")    --> false

3、Luaのパッケージもtableで表しています.たとえばio.read()実際にioテーブルのkeyがreadである関数を呼び出す.4、変数がtableの参照を保存していない場合、luaはtableが占めるメモリ領域を自動的に解放します.5、tableでチェーンテーブルを実現し、
--  table    。
list = nil
for line in io.lines() do
  list = {next=list, value=line}
end
--     。
l = list
while l do
  print(l.value)
  l = l.next
end

このような実装方式は実際の使用ではほとんど使われず、チェーンテーブルのより良い実装方式はarraysであり、後で提案される.6、「table」を0から始めたいなら(やはり提案しないで、1から始めることをお勧めします)、簡単です.
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday"}

7、table初期化データの最後の要素の後ろのカンマは許可されています.
a = {[1]="red", [2]="green", [3]="blue",}

8、table初期化データ間のカンマはセミコロンで代用できます.ただし、セミコロンは通常、「list part」や「record part」など、異なるタイプの領域を区別するために使用されます.
{x=10, y=45; "one", "two", "three"}

9、tableを再帰的に実現する.unpack(),
function unpack(t, i)
  i = i or 1
  if t[i] ~= nil then
    return t[i], unpack(t, i + 1)
  end
end