中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Lua(一)——類型與值

發布時間:2020-07-02 21:09:24 來源:網絡 閱讀:2783 作者:細桶假狗屎 欄目:web開發

lua是一款小巧的腳本語言,是巴西里約熱內盧天主教大學里的一個研究小組于1993年開發其設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定制功能。lua由標準C編寫而成,幾乎在所有操作系統和平臺上都可以編譯、運行。lua并沒有提供強大的庫,這是由它的定位決定的,所以lua不適合作為開發獨立應用程序的語言,在游戲開發等領域使用較多。

1. 引子

1.1 保留字

保留字的概念不用多說,lua中的保留字如下21個:

and break do else elseif end false for function if 
in local nil not or repeat return then true until while
1.2 注釋

注釋分為行注釋和塊注釋:

-- 行注釋
-- print("the line notes")

-- 塊注釋
--[[
print("the first block notes")
print("the second block notes")
]]

使用塊注釋時,建議用如下形式:

--[[
print("the first block notes")
print("the second block notes")
--]]

這種形式的好處是,如果想要取消塊注釋,只需在塊注釋開始前再加一個-符號,如此可以將塊注釋的開始行和結束行都變為行注釋:

---[[
print("the first block notes")
print("the second block notes")
--]]

這里還要提到的一點是,如果在被注釋的內容中出現]]的解決方法。在lua5.1版本后,可以通過在兩個相連的中括號間添加相等數量的=來解決,如此便可在注釋內容中使用]]

--[===[
print("the first block notes")
print("the second block notes")
[[
]]
--]===]
1.3 shebang

shellpython一樣,在lua中也有shebang,放于.lua文件的第一行,如果改文件有執行權限,則可以直接執行:

#!/bin/bash
#!/usr/bin/env lua

2. 類型與值

lua中共有8種基礎類型:

nil  boolean  number  string  userdata  function  thread  table

nil即為空,相當于python中的None和JavaScript中的undefined/null,比較簡單;userdata為自定義變量,thread與多線程、并發有關,這兩種變量不必在初學階段做過多糾結,下面我們主要看看number,boolean,string,table和function。

2.1 判斷值的類型:

內置的type()函數可以返回變量或值的類型:

print(type(nil))        --nil
print(type(true))       --boolean
print(type(12.2))       --number
print(type("hello"))    --string
print(type(print))      --function
print(type(type(nil)))  --string  此處無論type中的是何值,print出的都是string,因為type()的返回值是string類型
2.2 lua中的number

lua中沒有像C/C++/Java中的整型(int/Integer),所有的數字均為雙精度浮點數(double/Double)。在lua中可以使用科學計數法表示數字常量,下面幾種寫法都是允許的:

4       3.1
6.6e+5  2.5e-3
2.3 lua中的boolean

lua中的boolean值和pythonJavaScript中的boolean有些區別。在pythonJavaScript中,None/null,空字符串和數字0在邏輯判斷中都會轉換為false,而在lua中,空字符串和數字0在邏輯判斷中都會轉換為true,只有nil在邏輯判斷中都會轉換為false:

if "" and 0 then
    print(true)
else
    print(false)
end

--[[
輸出結果為true
--]]
2.4 lua中的string

lua中的字符串是不可變量,這和python中相同,與C/C++/Java中不同。與pythonJavaScript一樣,lua中既可以使用單引號',也可以使用雙引號"來聲明字符串:

stringA = "This is string A"
stringB = 'The string B'

lua中也有轉義字符,如定義一個分為兩行的字符串:

stringTwoLine = "This is the first line.\nThe second line."

lua中,可以使用一對匹配的` `來界定一個字符串,如果此時該字符串的第一個字符是換行符,該換行符將會被lua忽略,此外在該字符串中所有的轉義字符如\n \t等都會被忽略,即所有的轉義字符在` `內失效。該用法通常用來書寫含有代碼的字符串:

indexPage = [[
    <html>
        <head>
            <title>HTML Title</title>
        </head>
        <body>
            <div>Hello World</div>
        </body>
    </html>]]

print(indexPage)

與其他大多數編程語言不同,lua中不能使用+來連接字符串,而要用..來進行連接:

> print("hello" + " world")
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
    stdin:1: in main chunk
    [C]: ?
> print("hello".." world")  -- 輸出結果hello world

lua中計算字符串長度有些新奇,這里對比pythonJavaScript來看一下,方便加深印象:

len('helloworld')  # python
'helloworld'.length  // JavaScript
#'helloworld'  -- lua

lua中有兩個內置函數tonumber()tostring()用于將string轉換為number及將number轉換為string,在轉換失敗時不會拋出異常,而是將其轉換為nil:

tonumber('1.173')  -- 1.173
tonumber('hello')  -- nil
tostring(3.14159)  -- '3.14159'
2.5 lua中的table

table是lua中僅有的數據結構機制。table非常類似于python中的dict,只要hashable的值均可作為key的,可以簡單的認為string和number均可作為key,如:

dataTable, newTable = {}, {}  -- 初始化table
dataTable["name"] = "jiagoushi"  -- 賦值,key="name",value="jiagoushi"
print(dataTable["name"])  -- 取值,值為"jiagoushi"
print(dataTable.name)  -- 另一種取值方式,值為"jiagoushi"
dataTable[1] = 233
print(dataTable[1])  -- 取值,值為233
dataTable[2.2] = "Beijing"
print(dataTable[2.2])  -- 取值,值為"Beijing"
print("dataTable的長度為 " .. #dataTable)  -- 與取string長度相同,#也可以用來取table的長度
for i = 1, 10 do
    newTable[i] = i * 2
end
for j = 1, #newTable do  -- 循環輸出該table中的值
    print("newTable[" .. j .. "] = " .. newTable[j])
end

關于lua中table的key值,如果使用整數的話,通常會以1作為起始值,這點與絕大多數編程語言習慣從0開始不同,因為lua中有不少機制依賴該慣例,因此應該多加注意。

2.5 lua中的function

pythonJavaScript相同,在lua中,函數被視為第一類值,可以被自由傳遞。看一下函數的基本用法:

-- 函數定義,有一個形參name
function sayHello(name)
    print("Hello, " .. name)
end

-- 函數調用
sayHello("Li Lei")  -- "Hello, Li Lei"
sayHello("Han Meimei")  -- "Hello, Han Meimei"

有關函數的高階內容,放到之后的博客中繼續講解,敬請關注。

完。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东兰县| 万盛区| 东乌珠穆沁旗| 兴宁市| 麦盖提县| 浙江省| 白沙| 电白县| 武川县| 潞西市| 新邵县| 巴彦淖尔市| 呼伦贝尔市| 盐边县| 牡丹江市| 班戈县| 莒南县| 贵南县| 宝丰县| 丘北县| 酒泉市| 蒲城县| 乳源| 通道| 洱源县| 凤凰县| 古丈县| 汕尾市| 遵义县| 远安县| 安阳市| 廊坊市| 丹棱县| 闽侯县| 昌吉市| 楚雄市| 余姚市| 泾阳县| 和龙市| 大竹县| 康保县|