欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:LuatOS學習筆記

柚子快報邀請碼778899分享:LuatOS學習筆記

http://yzkb.51969.com/

LuatOS 文檔

一、LuatOS是什么?

????????LuatOS:

針對嵌入式的腳本運行框架,以極大提升開發(fā)效率。使用Lua 5.3作為主要語言,針對資源較少的嵌入式環(huán)境進行了優(yōu)化,極大提升了運行效率。用于物聯(lián)網(wǎng)設備的強大的嵌入式Lua引擎,具有許多組件,且需求內存很少(16K RAM、128K Flash)

二、學習資源

????????Chat社區(qū)(強烈推薦)?地址: chat.openluat.com

? 技術支持 - LuatOS 文檔

三、Lua教程

Lua是目前嵌入式方案中,資源占用?最小?、運行效率?最高?、語法?最簡潔?的一門腳本語言。適合作為編程入門語言,語法簡單。與c完美契合,LuatOS本身開源,可以輕松地用c為其添加一套c庫接口,實現(xiàn)高效。

《文字版教程》參考自:基礎語法 - LuatOS 文檔

1、初識Lua

Lua :輕量小巧的腳本語言,用標準C語言編寫、以源代碼形式開放。

Lua虛擬機可以很方便的嵌入別的程序里,為應用程序提供靈活的擴展和定制功能。

Lua是作為嵌入式腳本的最佳選擇:

????????整個Lua虛擬機編譯后一百余K,適當?shù)牟眉暨€能做到更小,十分適合嵌入式的開發(fā)。

????????目前腳本引擎中,Lua的運行速度占有絕對優(yōu)勢。

確保 英文 標點符號。

第一個 Lua 程序

點我快速測試下面的代碼

print("hello world!")

輸出數(shù)據(jù)

函數(shù)是可以實現(xiàn)某些功能的子程序,用函數(shù)名(參數(shù))來執(zhí)行。

點我快速測試下面的代碼

print("測試")

print("aabcdefg")

print("xxxxx","第二個參數(shù)","第三個參數(shù)")

代碼注釋

注釋不會被運行。便于理解代碼含義。

單行注釋:用--開頭

多行注釋:用--[[開頭, --]]結尾,可以跨多行

點我快速測試下面的代碼

print("這段代碼會運行")

--print("我被注釋掉了,所以不會運行")

--[[

我是多行注釋

不管我寫多少行

都不會影響代碼運行

--]]

變量

number變量

點我快速測試下面的代碼

--新建三個變量,并賦值

year = 1926

month = 8

day = 7

--打印出三個變量的值

print(year,month,day)

了解nil

nil類型:沒有任何有效值。

沒有聲明的變量,它的值就是nil

點我快速測試下面的代碼

ccc = 233

print(ccc)

print(aaa)

以下代碼,會輸出什么結果?

點我快速測試下面的代碼

a = 1

b = '2'

c = a

print(a,b,c,d)

賦值語句

賦值是改變一個變量值的最基本的方法。

用等號對左邊的變量進行賦值

n = 2

n = 3

n = n + 1

b = n

Lua可以對多個變量同時賦值:變量用逗號分開,右邊的值會依次賦給左邊的變量。

n = 1

a, b = 10, 2*n

當左右值的數(shù)量不一致時:

變量個數(shù) > 值的個數(shù):按變量個數(shù)補足nil 變量個數(shù) < 值的個數(shù):多余的值會被忽略

點我快速測試下面的代碼

a, b, c = 0, 1

print(a,b,c)

--輸出0 1 nil

a, b = a+1, b+1, b+2

print(a,b)

--輸出1 2

a, b, c = 0

print(a,b,c)

--輸出0 nil nil

以下代碼,會輸出什么結果?

點我快速測試下面的代碼

a,b,c = 1,2,3

a,c = a+1,b

d = c,b

print(a,b,c,d)

交換變量

已知a和b的值,請在交換他們的值,使打印輸出12??34

點我快速測試下面的代碼

a = 34

b = 12

--你需要在這里進行交換變量的操作

--提示:新建一個變量來存放臨時的值

--?[[ 借助臨時變量

c?=?a

a?=?b

b?=?c

--]]

--[[ 不借助臨時變量,lua風格,簡單直接

a,b?=?b,a

--]]

print(a,b)

輸出變量

點我快速測試下面的代碼

num = 123

--請補全代碼,輸出num的值

print(你要在這里填東西)

print(num)

算數(shù)運算符

運算符:告訴解釋器執(zhí)行特定的數(shù)學或邏輯運算。

算術運算符:

+ 加法

- 減法

* 乘法

/ 除法

% 取余,求出除法的余數(shù)

^ 乘冪,計算次方

- 負號,取負值

點我快速測試下面的代碼

a = 21

b = 10

c = a + b

print('a + b 的值為 ', c ) -- 31

c = a - b

print('a - b 的值為 ', c ) -- 11

c = a * b

print('a * b 的值為 ', c ) -- 210

c = a / b

print('a / b 的值為 ', c ) -- 2.1

c = a % b

print('a % b 的值為 ', c ) -- 1

c = a^2

print('a^2 的值為 ', c ) -- 441.0

c = -a

print('-a 的值為 ', c ) -- -21

c = a * (b - a)

print('a * (b - a) 的值為 ', c ) -- -231

你需要完成下面的任務:

長方體的長寬高為a、b、c(單位米),重量為m(單位克)

打印出物體的密度(單位g/m3)

注:密度計算公式 密度 = 質量 / 體積

a,b,c = 1,2,3 --長寬高

m = 10 --重量

--請打印出物體的密度

print(10/(1*2*3))

-- 1.6666666666667

字符串

string類型變量

字符串(string),一串文本數(shù)據(jù)。

Lua 三種表示方式:

單引號 雙引號 [[ 和 ]]?

點我快速測試下面的代碼

--雙引號間的一串字符

str1 = "Lua"

--單引號間的一串字符

str2 = 'Lua'

--[[和]]--間的一串字符

str3 = [[Lua]]

str4 = [[使用雙括號時,甚至能包含換行數(shù)據(jù)

換行了

最后一行]]

--輸出所有字符串

print(str1)

print(str2)

print(str3)

print(str4)

--[[

[10:27:31] Lua

[10:27:31] Lua

[10:27:31] Lua

[10:27:31] 使用雙括號時,甚至能包含換行數(shù)據(jù)

換行了

最后一行

--]]

接下來你需要完成下面的練習:

新建三個變量s1、s2、s3

分別存入字符串數(shù)據(jù):str、abc、233,使輸出打印正確

點我快速測試下面的代碼

--請在空白處補全代碼

s1 = "str"

s2 = 'abc'

s3 = [[233]]

print("s1,s2,s3的值:",s1,s2,s3)

print("s1,s2,s3的類型:",type(s1),type(s2),type(s3))

--[[

[10:30:26] s1,s2,s3的值: str abc 233

[10:30:26] s1,s2,s3的類型: string string string

--]]

轉義字符

如何輸出單引號和雙引號?如何輸出回車換行?

輸出單引號時,用雙引號括起來

str = "'"

輸出雙引號時,用單引號括起來

str = '"'

如何同時顯示單引號和雙引號?轉義字符。

轉義字符用于表示不能直接顯示的字符,如后退鍵、回車鍵、等。

以?\?開頭的都是轉義字符。常用的轉義字符:

轉義字符 含義 \n 換行(LF),將當前位置移到下一行開頭 \r 回車(CR),將當前位置移到本行開頭 \\ 反斜杠字符\ \‘ 單引號 \“ 雙引號 \0 空字符(NULL) \ddd 1到3位八進制數(shù)所代表的任意字符 \xhh 1到2位十六進制所代表的任意字符

給str賦值一個單引號,一個雙引號(’”):

str = "\'\""

點我快速測試下面的代碼

--str = --補全代碼

str = "ab\\cd\"ef\'g\\h]]"

print(str)

--輸出應為ab\cd"ef'g\h]]

string拼接

用..來表示字符串拼接:

點我快速測試下面的代碼

print('abc'..'def')

str1 = '123'

str2 = '999'

print(str1..str2)

--[10:59:07] abcdef

--[10:59:07] 123999

點我快速測試下面的代碼

s1,s2,s3 = "aaa","bbb","ccc"

--all = --請補全代碼

all = s1..s2..s3

print(all)

--[11:01:24] aaabbbccc

number轉string

把number類型的變量和string類型的變量拼接起來,組成一個新的string

????????將number類型的變量n轉換成string類型的值,就可以拼接了。用tostring(value)函數(shù)

點我快速測試下面的代碼

n = 123

s = 'm/s'

result = tostring(n)..s

print(result)

--[11:03:23] 123m/s

下面你要完成這個任務:

已知三個變量n1、s、n2

然后將他們按順序拼接起來,存入變量result,使輸出結果正確

????????某些情況下,Lua會自動將number類型轉換成string類型

點我快速測試下面的代碼

n1,s,n2 = 1,"abc",2

--result = --請補全代碼

result = n1..s..n2

print(result)

--[11:05:17] 1abc2

string轉number

變量s,存儲一個字符串,代表了一個數(shù)字,如何轉成number再與n相加計算呢?

將string類型的變量s轉換成number類型的值,就可以計算了。用tonumber(value)函數(shù)

點我快速測試下面的代碼

n = 123

s = '2333'

result = tonumber(s) + n

print(result)

--[11:07:27] 2456

下面你要完成這個任務:

三個字符串變量s1、s2、s3,

計算他們的算術和,賦值給新建的變量result,使下面代碼輸出正確結果

點我快速測試下面的代碼

s1,s2,s3 = "11","12","100"

--result = --請補全代碼

result = tonumber(s1) + tonumber(s2) + tonumber(s3)

print(result)

--[11:10:14] 123

--result = s1 + s2 + s3 不可以

邏輯運算

布爾型和比較運算

布爾型(boolean)只有兩個可選值:true(真) 和?false(假)

Lua 把 false 和 nil 看作是false,其他的都為true(包括0這個值,相當于true)

Lua 關系運算符:

符號 含義 == 等于,檢測兩個值是否相等,相等返回 true,否則返回 false ~= 不等于,檢測兩個值是否相等,相等返回 false,否則返回 true > 大于,如果左邊的值大于右邊的值,返回 true,否則返回 false < 小于,如果左邊的值大于右邊的值,返回 false,否則返回 true >= 大于等于,如果左邊的值大于等于右邊的值,返回 true,否則返回 false <= 小于等于, 如果左邊的值小于等于右邊的值,返回 true,否則返回 false

點我快速測試下面的代碼

a = 21

b = 10

print('==的結果',a==b)

print('~=的結果',a~=b)

print('>的結果',a>b)

print('<的結果',a

print('>=的結果',a>=b)

print('<=的結果',a<=b)

--[[

[11:14:13] ==的結果 false

[11:14:13] ~=的結果 true

[11:14:13] >的結果 true

[11:14:13] <的結果 false

[11:14:13] >=的結果 true

[11:14:13] <=的結果 false

--]]

點我快速測試下面的代碼

a = 1

b = '1'

c = a

d = 2

print(a == b)

print(c == a)

print(a ~= b)

print(d <= c)

--[[

[11:15:40] false

[11:15:40] true

[11:15:40] true

[11:15:40] false

--]]

邏輯運算符

邏輯運算符基于布爾型的值來進行計算。

?Lua 常用邏輯運算符:

符號 含義 and 邏輯與操作符。 若 A 為 false,則返回 A,否則返回 B。不是返回 true/ false or 邏輯或操作符。 若 A 為 true,則返回 A,否則返回 B。不是返回 true/ false not 邏輯非操作符。與邏輯運算結果相反,如果條件為 true,邏輯非為 false

點我快速測試下面的代碼

print('true and false的結果',true and false)

print('true or false的結果',true or false)

print('true and true的結果',true and true)

print('false or false的結果',false or false)

print('not false的結果',not false)

print('123 and 345的結果',123 and 345)

print('nil and true的結果',nil and true)

--[[

[11:20:22] true and false的結果 false

[11:20:22] true or false的結果 true

[11:20:22] true and true的結果 true

[11:20:22] false or false的結果 false

[11:20:22] not false的結果 true

[11:20:22] 123 and 345的結果 345 注意

[11:20:22] nil and true的結果 nil 注意

--]]

點我快速測試下面的代碼

a = 1

b = '1'

c = 0

print(a and b)

print(c or a)

print(not b)

print(d and c)

print(1 < 2 and 3 > 2)

--[[

[11:23:22] 1 注意

[11:23:22] 0 注意

[11:23:22] false

[11:23:22] nil 注意

[11:23:22] true

--]]

檢驗大小(自測題)

已知number變量n,判斷n是否符合下面的條件:

3

正確的是?

(返回true即表示變量n符合要求)

點我快速測試下面的代碼

n = 1--這個數(shù)可能是任意數(shù)字

print(n > 10 or n <= 3)

print(n <= 10 or n > 3)

print(n < 3 and n >= 10) --正確的

print(n <= 10 or n > 3)

--[[

n = 1

[11:27:24] true 不對

[11:27:24] true 不對

[11:27:24] false

[11:27:24] true 不對

n = 8

[11:30:32] false 不對

[11:30:32] true

[11:30:32] false 不對

[11:30:32] true

n = 15

[11:30:54] true 不對

[11:30:54] true 不對

[11:30:54] false

[11:30:54] true 不對

--]]

分支判斷

條件判斷

if 條件 then

符合條件的代碼

end

下面是你需要完成的事:

已知變量n,請判斷n是否為奇數(shù),如果是,請給n的值加上1

求出n除以2的余數(shù):n % 2 給n的值加上1:n = n + 1

點我快速測試下面的代碼

--已知一個number變量n

n = 5 --這個數(shù)字是幾都有可能

print("n在判斷前的值",n)

--[[

if 你的條件 then

要做的事

end

--]]

if n % 2 == 1 then

n = n + 1

end

print("n在判斷后的值",n)

--[[

[08:27:19] n在判斷前的值 5

[08:27:19] n在判斷后的值 6

--]]

多條件判斷

if 條件1 then

滿足條件1

elseif 條件2 then

不滿足條件1,但是滿足條件2

else

前面條件全都不滿足

end

點我快速測試下面的代碼

n = 1--更改這個數(shù)多運行幾次試試

if n >= 0 and n < 5 then

print('太小')

elseif n >= 5 and n < 10 then

print('適中')

elseif n >= 10 then

print('太大')

end

注意:else和elseif都是可選的,可有可無,但end不能省略

下面是你需要完成的事:

已知變量n,請判斷n是否為奇數(shù),

如果是,請給n的值加上1 如果不是,請將n的值改為原來的兩倍

點我快速測試下面的代碼

--已知一個number變量n

n = 4 --這個數(shù)字是幾都有可能

print("n在判斷前的值",n)

if n % 2 == 1 then

n = n + 1

else

n = n * 2

end

print("n在判斷后的值",n)

--[[

[10:07:04] n在判斷前的值 4

[10:07:04] n在判斷后的值 8

--]]

判斷三角形合法性(自測題)

三個number類型的變量a、b、c,分別代表三根木棒的長度

用這三根木棒,是否可以組成一個三角形(兩短邊之和大于第三邊)

如果可以組成,就打印出true 如果不可以,就打印false

a,b,c = 3,4,5--多改幾個數(shù)值自行測試

print("a=",a,"b=",b,"c=",c)

if a+b>c and b+c>a and c+a>b then

print("可以組成三角形",true)

else

print("不能組成三角形!",false)

end

print("判斷完成")

--[[

[10:13:21] a= 3 b= 4 c= 5

[10:13:21] 可以組成三角形 true

[10:13:21] 判斷完成

[10:14:18] a= 1 b= 2 c= 3

[10:14:18] 不能組成三角形! false

[10:14:18] 判斷完成

[10:14:39] a= 5 b= 8 c= 6

[10:14:39] 可以組成三角形 true

[10:14:39] 判斷完成

--]]

if的判斷依據(jù)(自測題)

Lua 把?false?和?nil?看作是false,其他的都為true(包括0這個值,相當于true)

那么問題來了,執(zhí)行下面的代碼,將會輸出什么?

點我快速測試下面的代碼

result = ''

if 0 then

result = result..'T,'

else

result = result..'F,'

end

if a then

result = result..'T'

else

result = result..'F'

end

print(result)

--[10:17:18] T,F

函數(shù)

初識函數(shù)

函數(shù):一段在一起的、可以做某一件事兒的程序,也叫子程序。

函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3,......)

很多事情都是重復性操作,用函數(shù),可以快速完成這些操作

函數(shù)名為hello,調用(執(zhí)行):

點我快速測試下面的代碼

function hello()

print('Hello world!')

end

hello()

--[10:19:43] Hello world!

Lua中,函數(shù)也是一種變量類型,hello實際上也是一個變量,里面存儲一個函數(shù):

點我快速測試下面的代碼

function hello()

print('Hello world!')

end

a = hello

--把hello函數(shù)同時賦值給a變量

a()

hello()

--a和hello變量指向同一個函數(shù)

--所以執(zhí)行結果和hello()相同

--[10:23:14] Hello world!

--[10:23:14] Hello world!

可以這樣聲明hello函數(shù):

點我快速測試下面的代碼

hello = function()

print('Hello world!')

end

hello()

--[10:24:09] Hello world!

下面你需要做一件簡單的事情:

新建一個函數(shù)變量biu,使其執(zhí)行后會打印biubiubiu這個字符串, 新建一個函數(shù)變量pong,使其與biu指向的函數(shù)相同

點我快速測試下面的代碼

--請在此處補全代碼

function biu( )

print("biubiubiu")

end

pong = biu

--請使下面的調用可以正常打印出biubiubiu

biu()

pong()

print("biu和pong相等嗎?",biu==pong)

--[[

[10:26:24] biubiubiu

[10:26:24] biubiubiu

[10:26:24] biu和pong相等嗎? true

--]]

local變量

全局變量:在代碼運行周期從頭到尾,都不會被銷毀,而且隨處都可調用。

局部變量:臨時使用、可以自動銷毀釋放內存資源的變量。

用local創(chuàng)建一個局部變量。

局部變量只在被聲明的那個代碼塊內有效。

點我快速測試下面的代碼

a = 123

function add()

local n = a+2

print(n)

end

add()

print(n)

--[10:29:14] 125

--[10:29:14] nil

n是一個局部變量,只在這個funcion中有效,函數(shù)運行完后會自動回收這部分的內存。

應盡可能的使用局部變量,以方便lua虛擬機自動回收內存空間,減少資源占用提高運行速度。

點我快速測試下面的代碼

str = 'abc'

function connect()

local s = str..'def'

end

print(s,str)

--[10:31:40] nil abc

函數(shù)參數(shù)

function 函數(shù)名(參數(shù)1,參數(shù)2,...)

代碼內容

end

傳入的參數(shù),等價于在函數(shù)內部新建了一個local的變量,修改這些數(shù)據(jù)不會影響外部的數(shù)據(jù)(除了table等類型)

點我快速測試下面的代碼

function add(a,b)

print(a+b)

end

add(1,2)

--會輸出3

等價于:

點我快速測試下面的代碼

function add()

local a = 1

local b = 2

print(a+b)

end

add()

設計一個函數(shù)p,可以按下面的調用方式來打印出物體的密度:

點我快速測試下面的代碼

--補全這個函數(shù)的代碼,滿足題目要求

function p(a,b,c,m)

print("密度為:", m/(a*b*c) )

end

--一個長方體的長寬高分別為a、b、c(單位米)

a = 1

b = 2

c = 3

--這個物體重量為m(單位克)

m = 230

--下面打印出密度

--注:密度計算公式 密度 = 質量 / 體積

p(a,b,c,m)

--[10:39:59] 密度為: 38.333333333333

函數(shù)返回值

點我快速測試下面的代碼

function add(a,b)

return a+b

end

all = add(1,2)

--這里all的值就是3了

print(all)

--[10:41:36] 3

return表示返回一個值,并且立刻結束這個函數(shù)的運行

和輸入值可以有多個一樣,返回值也可以有多個

點我快速測試下面的代碼

function add(a,b)

return a+b,"ok"

end

all, result = add(1,2)

--這里all的值就是3了

--這里result的值就是string "ok"

print(all,result)

--[10:43:06] 3 ok

下面問題來了,請設計一個函數(shù)p,可以按下面的調用方式來返回出物體的密度,返回值為number類型:

點我快速測試下面的代碼

function p(a,b,c,m)

--請補全代碼

return m/(a*b*c)

end

--一個長方體的長寬高分別為a、b、c(單位米)

a = 1

b = 2

c = 3

--這個物體重量為m(單位克)

m = 230

--下面返回密度值

--注:密度計算公式 密度 = 質量 / 體積

result = p(a,b,c,m)

print(result)

--[10:45:00] 38.333333333333

判斷三角形合法性2(自測題)

你需要使用前面幾章的知識,來完成下面的題目

已知三個number類型的變量,分別代表三根木棒的長度 請判斷,使用這三根木棒,是否可以組成一個三角形(兩短邊之和大于第三邊) 請新建一個函數(shù)triangle,并可以用如下形式調用(如果可以組成,就返回true):

點我快速測試下面的代碼

function triangle(a,b,c)

--請補全代碼

if a>b and a>c then --a是最長邊

if b+c>a then

print("可以組成三角形", b, "+", c, ">", a)

return true

else

print("不能組成三角形", b, "+", c, "!>", a)

return false

end

elseif b>a and b>c then --b是最長邊

if a+c>b then

print("可以組成三角形", a, "+", c, ">", b)

return true

else

print("不能組成三角形", a, "+", c, "!>", b)

return false

end

elseif c>b and c>a then --c是最長邊

if a+b>c then

print("可以組成三角形", a, "+", b, ">", c)

return true

else

print("不能組成三角形", a, "+", b, "!>", c)

return false

end

end

end

result = triangle(1,2,3)--傳入值為三邊長度,多改幾個測試下

print(result)

--[[

[11:01:02] 不能組成三角形 1 + 2 !>3

[11:01:02] false

[11:02:23] 可以組成三角形 3 + 4 >5

[11:02:23] true

[11:02:50] 可以組成三角形 7 + 9 >10

[11:02:50] true

--]]

返回多個值(自測題)

已知長方體的長和寬 計算周長和面積 新建函數(shù)rectangle,用如下形式調用:

點我快速測試下面的代碼

function rectangle(a,b)

--補全代碼

return a*b, (a+b)*2

end

area,len = rectangle(1,2)

--結果:

--面積area為2

--周長len為6

print(area,len)

--[11:05:35] 2 6

table

認識數(shù)組

數(shù)組,用一個變量名,存儲一系列的值

Lua中,用table(表)來實現(xiàn)

Lua中,table是一系列元素的集合,用大括號進行表示,其中的元素間以逗號分隔:

t = {1,3,8,5,4}

第一個元素的下標是1,第二個是2,...

點我快速測試下面的代碼

t = {1,3,8,5,4}

print(t[1]) --打印1

print(t[3]) --打印8

t[2] = 99 --更改第二個元素的值

print(t[2]) --打印99

t[6] = 2 --憑空新建第六個元素并賦值

print(t[6]) --打印2

print(t[10])

--因為不存在,打印nil

--[[

[11:57:35] 1

[11:57:35] 8

[11:57:35] 99

[11:57:35] 2

[11:57:35] nil

--]]

以上是table當作數(shù)組來用(一般語言中的數(shù)組基本都為不可變長度,這里的table為可變長度)

新建一個table,名為cards,存入1-10十個數(shù)字 將第3個元素與第7個元素交換 將第9個元素與第2個元素交換 增加第11個變量,值為23

cards = {1,2,3,4,5,6,7,8,9,10}

print(cards[3],cards[7]) --打印第3,第7元素

cards[3],cards[7] = cards[7],cards[3]

print(cards[3],cards[7]) --打印第3,第7元素

print(cards[2],cards[9]) --打印第2,第9元素

cards[2],cards[9] = cards[9],cards[2]

print(cards[2],cards[9]) --打印第2,第9元素

cards[11] = 23

print(cards[11]) --打印第11元素

print(cards[12])

--因為不存在,打印nil

--[[

[12:04:38] 3 7

[12:04:38] 7 3

[12:04:38] 2 9

[12:04:38] 9 2

[12:04:38] 23

[12:04:38] nil

--]]

簡單table

table中可以包括任意類型的數(shù)據(jù)

t = {"abc",223,",..a",123123}

能在里面放function變量

點我快速測試下面的代碼

t = {

function() return 123 end,

function() print("abc") end,

function(a,b) return a+b end,

function() print("hello world") end,

}

t[1]()

t[2]()

t[3](1,2)

t[4]()

--[12:06:49] abc

--[12:06:49] hello world

這些table訪問每個元素的方式仍然是直接用下標,也能用下標來進行修改

下面你需要完成:

新建一個table,名為funcList,并實現(xiàn)以下功能 調用funcList[1](a,b),返回a和b的乘積 調用funcList[2](a,b),返回a減b的差 調用funcList[3](a),返回a的相反數(shù)(-a)

點我快速測試下面的代碼

--請補全代碼

funcList = {

function(a,b) return a*b end,

function(a,b) return a-b end,

function(a) return -a end

}

a,b = 1,2--提供兩個數(shù)

print("a,b值為",a,b)

print("a和b的乘積:",funcList[1](a,b))

print("a和b的差:",funcList[2](a,b))

print("a和相反數(shù):",funcList[3](a))

--[[

[12:09:33] a,b值為 1 2

[12:09:33] a和b的乘積: 2

[12:09:33] a和b的差: -1

[12:09:33] a和相反數(shù): -1

--]]

table下標

前兩節(jié),table都只是一些簡單的List(列表),每個元素的下標都是自動從1排列的

Lua中,下標可以直接在聲明時進行指定:

點我快速測試下面的代碼

t = {6,7,8,9}

--上面和下面的代碼等價

t = {

[1] = 6,

[2] = 7,

[3] = 8,

[4] = 9,

}

--甚至你可以跳過某些下標

t = {

[1] = 6,

[3] = 7,

[5] = 8,

[7] = 9,

}

print(t[7])

--輸出9

--在聲明后賦予元素值也是可以的

t = {}--空的table

t[101] = 10

print(t[101])

--輸出10

需要:

新建一個變量t,并按下面的格式聲明 下標為1的元素,值為123(number) 下標為13的元素,值為"abc"(string) 下標為666的元素,值為"666"(string)

點我快速測試下面的代碼

--請補全代碼

t = {

[1] = 123,

[13] = "abc",

[666] = "666"

}

print("下標為1的元素:",t[1],type(t[1]))

print("下標為13的元素:",t[13],type(t[13]))

print("下標為666的元素:",t[666],type(t[666]))

--[[

[12:14:15] 下標為1的元素: 123 number

[12:14:15] 下標為13的元素: abc string

[12:14:15] 下標為666的元素: 666 string

--]]

下標進階

自定義下標:在Lua中,下標也可以是字符串:

點我快速測試下面的代碼

t = {

["apple"] = 10,

banana = 12,

pear = 6,

}

--使用["下標"] = 值

--和 下標 = 值

--都是正確寫法

--當?shù)诙N方式有歧義時,應該用第一種方式

--可以用下面兩種方式訪問:

print(t["apple"])

--輸出10

print(t.apple)

--輸出10

--當?shù)诙N方式有歧義時,應該用第一種方式

--[[

[12:16:09] 10

[12:16:09] 10

--]]

用string作為下標時,table的靈活性提升了一個數(shù)量級。

string作為下標時,也可以動態(tài)賦值:

點我快速測試下面的代碼

t = {} -- 空table

t["new"] = "新的值"

print(t.new)

--輸出 新的值

--[12:17:22] 新的值

完成:

新建table變量t 下標為apple的元素,值為123(number) 下標為banana的元素,值為"abc"(string) 下標為1@1的元素,值為"666"(string)

點我快速測試下面的代碼

--請補全代碼

t = {

apple = 123,

["banana"] = "abc",

["1@1"] = "666"

}

print("下標為apple的元素:",t["apple"],type(t["apple"]))

print("下標為banana的元素:",t["banana"],type(t["banana"]))

print("下標為1@1的元素:",t["1@1"],type(t["1@1"]))

--[[

[12:21:08] 下標為apple的元素: 123 number

[12:21:08] 下標為banana的元素: abc string

[12:21:08] 下標為1@1的元素: 666 string

--]]

table小測驗

下面的代碼,將會打印什么?

點我快速測試下面的代碼

t = {

apple = {

price = 7.52,

weight = 2.1,

},

banana = {

price = 8.31,

weight = 1.4,

year = '2018'

},

year = '2019'

}

print(

t.price,

t.apple.price,

t.banana.weight,

t.year

)

--[12:23:04] nil 7.52 1.4 2019

table小測驗2

下面的代碼,將會打印什么?

點我快速測試下面的代碼

t = {

{

price = 7.52,

weight = 2.1,

},

{

price = 8.31,

weight = 1.4,

year = '2018'

},

year = '2019'

}

print(

t["price"],

t[1].price,

t[2].weight,

t["year"]

)

--[12:24:14] nil 7.52 1.4 2019

Lua全局變量與table

在table中,可以直接用table名[下標]或table名.string下標來訪問元素

Lua中,所有的全局變量全部被存放在了一個大table中,這個table名為:_G

點我快速測試下面的代碼

n = 123--新建變量

print(n)--輸出123

print(_G.n)--輸出123

_G.abc = 1--相當于新建全局變量

print(abc)--輸出1

_G["def"] = 23--相當于新建全局變量

print(def)--輸出23

--甚至你可以像下面這樣

_G.print("hello")

_G["print"]("world")

--[[

[12:26:14] 123

[12:26:14] 123

[12:26:14] 1

[12:26:14] 23

[12:26:14] hello

[12:26:14] world

--]]

現(xiàn)在,你明白為什么說萬物基于table了吧?

任務:

已知有一個全局變量,名為@#$ 請新建一個變量result 將@#$變量里的值賦值給result

點我快速測試下面的代碼

_G["@#$"] = 123

--result = @#$ --請補全代碼,錯誤,不符合標識符命名規(guī)則

result = _G["@#$"] --請補全代碼

print("result值為",result)

--[12:28:48] result值為 123

table小測試3

請新建一個名為t的table,滿足以下要求

t[10]可獲得number類型數(shù)據(jù)100 t.num可獲得number類型數(shù)據(jù)12 t.abc[3]可獲得string類型數(shù)據(jù)abcd t.a.b.c可獲得number類型數(shù)據(jù)789

點我快速測試下面的代碼

--請補全代碼

t = {

[10] = 100,

num = 12,

abc = {

[3] = "abcd"

},

a = {

b = {

c = 789

}

}

}

print("t[10]可獲得number類型數(shù)據(jù)100:",t[10],type(t[10]))

print("t.num可獲得number類型數(shù)據(jù)12:",t.num,type(t.num))

print("t.abc[3]可獲得string類型數(shù)據(jù)abcd:",t.abc[3],type(t.abc[3]))

print("t.a.b.c可獲得number類型數(shù)據(jù)789:",t.a.b.c,type(t.a.b.c))

--[[

[13:17:17] t[10]可獲得number類型數(shù)據(jù)100: 100 number

[13:17:17] t.num可獲得number類型數(shù)據(jù)12: 12 number

[13:17:17] t.abc[3]可獲得string類型數(shù)據(jù)abcd: abcd string

[13:17:17] t.a.b.c可獲得number類型數(shù)據(jù)789: 789 number

--]]

table.concat

table.concat (table [, sep [, i [, j ] ] ])

將元素是string或number類型的table,每個元素連接起來變成字符串并返回。

可選參數(shù)sep,表示連接的間隔符,默認為空。

i和j表示元素起始和結束的下標。

點我快速測試下面的代碼

local a = {1, 3, 5, "hello" }

print(table.concat(a))

print(table.concat(a, "|"))

-->打印的結果:

--135hello

--1|3|5|hello

請完成下面的任務:

已知table變量t, 將t中的結果全部連起來 間隔符使用, 并使用print打印出來

點我快速測試下面的代碼

t = {"a","b","c","d"}

print("連接結果:")

--補全代碼

str = table.concat (t)

print("連接結果:",str)

--[13:23:19] 連接結果:

--[13:23:19] 連接結果: abcd

table刪減

table.insert (table, [pos ,] value)

在(數(shù)組型)表 table 的 pos 索引位置插入 value,其它元素向后移動。pos 的默認值是表的長度加一,即默認是插在表的最后。

table.remove (table [, pos])

在表 table 中刪除索引為 pos(pos 只能是 number 型)的元素,并返回這個被刪除的元素,它后面所有元素的索引值都會減一。pos 的默認值是表的長度,即默認是刪除表的最后一個元素。

點我快速測試下面的代碼

local a = {1, 8} --a[1] = 1,a[2] = 8

table.insert(a, 1, 3) --在表索引為1處插入3

print(a[1], a[2], a[3])

table.insert(a, 10) --在表的最后插入10

print(a[1], a[2], a[3], a[4])

-->打印的結果:

--3 1 8

--3 1 8 10

local a = { 1, 2, 3, 4}

print(table.remove(a, 1)) --刪除速索引為1的元素

print(a[1], a[2], a[3], a[4])

print(table.remove(a)) --刪除最后一個元素

print(a[1], a[2], a[3], a[4])

-->打印的結果:

--1

--2 3 4 nil

--4

--2 3 nil nil

請完成下面的任務:

已知table變量t, 去除t中的第一個元素 然后這時,在t的第三個元素前,加上一個number變量,值為810

點我快速測試下面的代碼

t = {1,2,3,4,5,6,7,8,9}

--補全代碼

print(table.remove(t, 1)) --刪除速索引為1的元素

table.insert(t, 3, 810) --在表索引為3處,插入810

print("第一個元素應為2:",t[1])

print("第三個元素應為810:",t[3])

--[[

[15:58:43] 1

[15:58:43] 第一個元素應為2: 2

[15:58:43] 第三個元素應為810: 810

--]]

循環(huán)

while循環(huán)

while 繼續(xù)循環(huán)判斷依據(jù) do

執(zhí)行的代碼

end

計算從1加到100的結果:

點我快速測試下面的代碼

local result = 0

local num = 1

while num <= 100 do

result = result + num

num = num + 1

end

print(result)

--5050

任務:

已知兩個number類型的變量min和max 請計算從min與max之間,所有3的倍數(shù)的和 打印出結果

點我快速測試下面的代碼

min,max = 114,514 --這個結果應為42009

result = 0--結果存放到這個變量

--[[

while 請完善 do

--補全代碼

end

--]]

while min<=max do

if min % 3 == 0 then

result = result + min

end

min = min + 1

end

print("結果:",result)

--[16:05:29] 結果: 42009

for循環(huán)

for循環(huán)更加簡潔地表達中間累積的量

for 臨時變量名=開始值,結束值,步長 do

循環(huán)的代碼

end

步長可以省略,默認為1

臨時變量名可以直接在代碼區(qū)域使用(但不可更改),每次循環(huán)會自動加步長值,并且在到達結束值后停止循環(huán)

計算從1加到100的結果:

點我快速測試下面的代碼

local result = 0

for i=1,100 do

result = result + i

end

print(result)

--5050

當i≤100時,result不斷地加i,并且i每次循環(huán)后增加1

任務:

已知兩個number類型的變量min和max 請計算從min與max之間,所有7的倍數(shù)的和 打印出結果

點我快速測試下面的代碼

min,max = 114,514 --這個結果應為17955

result = 0--結果存放到這個變量

--for --補全代碼

for m = 114, 514, 1 do

if m % 7 == 0 then

result = result + m

end

end

print("結果:",result)

--[16:11:35] 結果: 17955

中斷循環(huán)

在循環(huán)體中用break,立即結束本次循環(huán),繼續(xù)運行下面的代碼

計算1-100相加途中,小于100的最大的和:

點我快速測試下面的代碼

result = 0

for i=1,100 do

result = result + i

if result > 100 then

result = result - i

break

end

end

print(result)

--91

當發(fā)現(xiàn)和大于100后,代碼立即把result的值還原到了加上當前數(shù)字之前的狀態(tài),并且調用break語句,立即退出了本次循環(huán)

在while中也可以使用break:

點我快速測試下面的代碼

result = 0

c = 1

while true do

result = result + c

if result > 100 then

result = result - c

break

end

c = c + 1

end

print(result)

--91

我們在這里直接使用了死循環(huán)(因為while的繼續(xù)運行判斷依據(jù)始終為true),整體邏輯也和之前for的代碼一致,當發(fā)現(xiàn)和大于100后,代碼立即把result的值還原到了加上當前數(shù)字之前的狀態(tài),并且調用break語句,立即退出了本次循環(huán)

現(xiàn)在你需要完成一項任務:

請求出小于變量max的13的倍數(shù)的最大值(max大于0) 并將結果打印出來 用for循環(huán)實現(xiàn)

點我快速測試下面的代碼

max = 810 --結果應為806

result = 0

--for --請補全代碼

for x = 810, 0, -1 do

if x % 13 == 0 then

result = x

break

end

end

print(result)

--806

循環(huán)測試題1(自測題)

print函數(shù)可以打印一行完整的輸出

那么,已知變量a,請打印出下面的結果:

(a為大于0的整數(shù),且需要輸出a行數(shù)據(jù),數(shù)據(jù)從1開始,每行與上一行的差為2)

1

3

5

7

9

(上面例子為當a為5的情況)

做題區(qū)域:

點我快速測試下面的代碼

a = 10

--需要用print輸出要求的結果

print("輸出結果:")

--for --請補全代碼

for x = 1, a, 1 do

if x % 2 == 1 then

print(x)

end

end

--[[

[16:27:18] 輸出結果:

[16:27:18] 1

[16:27:18] 3

[16:27:18] 5

[16:27:18] 7

[16:27:18] 9

--]]

循環(huán)測試題2(自測題)

已知變量a,請打印出下面的結果:

(a為大于0的整數(shù),且需要輸出a行數(shù)據(jù),第一行為一個*,后面每行多一個*)

*

**

***

****

*****

(上面例子為當a為5的情況)

做題區(qū)域:

點我快速測試下面的代碼

a = 10

--需要用print輸出要求的結果

print("輸出結果:")

str = ""

--for --請補全代碼

for m = 1, 10, 1 do

str = str.."*"

print(m, str)

end

--[[

[16:30:46] 輸出結果:

[16:30:46] 1 *

[16:30:46] 2 **

[16:30:46] 3 ***

[16:30:46] 4 ****

[16:30:46] 5 *****

[16:30:46] 6 ******

[16:30:46] 7 *******

[16:30:46] 8 ********

[16:30:46] 9 *********

[16:30:46] 10 **********

--]]

循環(huán)測試題3(自測題)

我們需要完成下面的任務

那么,已知變量a,請打印出下面的結果:

(a為大于0的整數(shù),且需要輸出a行數(shù)據(jù),按圖示規(guī)律輸出)

1

12

123

1234

12345

123456

1234567

12345678

123456789

12345678910

1234567891011

(上面例子為當a為11的情況)

做題區(qū)域:

點我快速測試下面的代碼

a = 13

--需要用print輸出要求的結果

print("輸出結果:")

str = ""

--for --請補全代碼

for m = 1, a, 1 do

str = str..m

print(str)

end

--[[

[16:33:53] 輸出結果:

[16:33:53] 1

[16:33:53] 12

[16:33:53] 123

[16:33:53] 1234

[16:33:53] 12345

[16:33:53] 123456

[16:33:53] 1234567

[16:33:53] 12345678

[16:33:53] 123456789

[16:33:53] 12345678910

[16:33:53] 1234567891011

[16:33:53] 123456789101112

[16:33:53] 12345678910111213

--]]

循環(huán)測試題4(自測題)

有一只猴子,第一天摘了若干個桃子 ,當即吃了一半,但還覺得不過癮 ,就又多吃了一個。 第2天早上又將剩下的桃子吃掉一半,還是覺得不過癮,就又多吃了兩個。 以后每天早上都吃了前一天剩下的一半加天數(shù)個(例如,第5天吃了前一天剩下的一半加5個)。 到第n天早上再想吃的時候,就只剩下一個桃子了。 那么,已知變量a為最后一天的天數(shù),請打印出第一天的桃子數(shù)。 如:a為5時,輸出114

做題區(qū)域:

點我快速測試下面的代碼

a = 6

--需要用print輸出要求的結果

print("輸出結果:")

for --請補全代碼

詳解string庫

string.sub

string庫的各種接口

string.sub(s, i [, j])

返回字符串?s?中,從索引?i?到索引?j?之間的子字符串。

i 可以為負數(shù),表示倒數(shù)第幾個字符。

當 j 缺省時,默認為 -1,即字符串 s 的最后位置。

當索引 i 在字符串 s 的位置在索引 j 的后面時,將返回一個空字符串。

點我快速測試下面的代碼

print(string.sub("Hello Lua", 4, 7))

print(string.sub("Hello Lua", 2))

print(string.sub("Hello Lua", 2, 1))

print(string.sub("Hello Lua", -3, -1))

-->打印的結果:

lo L

ello Lua

Lua

值得注意的是,我們可以使用冒號來簡化語法,像下面這樣:

點我快速測試下面的代碼

s = "12345"

s1 = string.sub(s, 4, 7)

s2 = s:sub(4, 7)

--兩種寫法是等價關系

print(s1,s2)

請完成下面的任務:

已知字符串變量s,請分別打印出(每種一行): s從第4個字符開始,到最后的值 s從第1個字符開始,到倒數(shù)第3個字符的值 s從倒數(shù)第5個字符開始,到倒數(shù)第2個字符的值

點我快速測試下面的代碼

s = "1919810"

--補全代碼

print()

print()

print()

string.rep

string.rep(s, n)

返回字符串 s 的 n 次拷貝。

示例代碼:

點我快速測試下面的代碼

print(string.rep("abc", 3))

--輸出結果:

--abcabcabc

請完成下面的任務:

打印一行數(shù)據(jù),數(shù)據(jù)內容為810個114514

點我快速測試下面的代碼

--補全代碼

print()

string.len

string.len(s)

接收一個字符串,返回它的長度。

點我快速測試下面的代碼

s = "hello lua"

print(string.len(s))

--輸出結果:

9

--同時也可以使用簡便語法

print(s:len())

請完成下面的任務:

新建一個變量s,使數(shù)據(jù)內容為810個114514 并打印出字符串s的長度

點我快速測試下面的代碼

s = --補全代碼

print()

大小寫轉換

string.lower(s)

接收一個字符串 s,返回一個把所有大寫字母變成小寫字母的字符串。

string.upper(s)

接收一個字符串 s,返回一個把所有小寫字母變成大寫字母的字符串。

示例代碼:

點我快速測試下面的代碼

s = "hello lua"

print(string.upper(s))

print(string.lower(s))

--輸出結果:

HELLO LUA

hello lua

--同時也可以使用簡便語法

print(s:upper())

print(s:lower())

請完成下面的任務:

已知一個變量s,打印出全是大寫字母的s字符串

點我快速測試下面的代碼

s = "asd8938KJjsidiajdl;(()k)"

print --補全代碼

string.format

string.format(formatstring, …)

按照格式化參數(shù)formatstring,返回后面...內容的格式化版本。

編寫格式化字符串的規(guī)則與標準 c 語言中 printf 函數(shù)的規(guī)則基本相同:

它由常規(guī)文本和指示組成,這些指示控制了每個參數(shù)應放到格式化結果的什么位置,及如何放入它們。

一個指示由字符%加上一個字母組成,這些字母指定了如何格式化參數(shù),例如d用于十進制數(shù)、x用于十六進制數(shù)、o用于八進制數(shù)、f用于浮點數(shù)、s用于字符串等。

示例代碼:

點我快速測試下面的代碼

print(string.format("%.4f", 3.1415926)) -- 保留4位小數(shù)

print(string.format("%d %x %o", 31, 31, 31))-- 十進制數(shù)31轉換成不同進制

d,m,y = 29,7,2015

print(string.format("%s %02d/%02d/%d", "today is:", d, m, y))

--控制輸出2位數(shù)字,并在前面補0

-->輸出

-- 3.1416

-- 31 1f 37

-- today is: 29/07/2015

請完成下面的任務:

已知一個變量n,為number類型整數(shù) 打印出n:連上n值的字符串

點我快速測試下面的代碼

n = 810

print --補全代碼

string的本質

這一節(jié)我們來講解字符串的本質

字符串,是用來存儲一串字符的,但是它的本質就是一串數(shù)字。如何用一串數(shù)字來代表一串字符呢?

在計算機中,每一個符號都對應著一個數(shù)字,但是在講解這個知識之前,我們了解一下補充知識:

在大多數(shù)編程語言中,我們使用0x開頭來表示這個數(shù)字是16進制的。

比如

10等價于0x0a

256等價于0xff

接下來,你需要了解,每一個符號都對應著一個數(shù)字,比如:

0對應著0x30、1對應著0x31?a對應著0x61、b對應著0x62?A對應著0x41、B對應著0x42

上面的編碼規(guī)則,我們稱之為ascii碼,具體想了解可以打開下面的網(wǎng)址查看:

ASCII編碼對照表_911查詢

當然,1字節(jié)最大為0xff,即256,只能存下一部分符號,大部分的中文按某些編碼,一個中文占用2或3個字節(jié)

計算機如何解析這些數(shù)據(jù),我們不需要了解,當你知道了上面的知識后,你應該可以理解下面的描述:

字符串"apple"實際上的內容就是下面的一串數(shù)字:

0x61,0x70,0x70,0x6c,0x65

同時,lua的字符串中可以保存任何數(shù)值,即使是0x00這種不代表任何含義的數(shù),也可以保存

補充:在其他語言中(如C),0x00代表字符串結束,但是在lua中并不是這樣。

lua的字符串每字節(jié)可以存儲任意的一字節(jié)數(shù)據(jù)。

比如下面的描述:

有一串lua字符串中的數(shù)據(jù)為:

0x01,0x02,0x30,0x00,0x44

實際人能看到的(不可見字符用?代替):

??0?D

當然,你不能說你看不見的數(shù)據(jù)就不存在,他們都完好無損地在這個字符串中

下面你需要思考一個問題:一串字符串數(shù)據(jù)如下,它的實際內容是什么(指人能看見的字符串內容,如abcd)?

0x62,0x61,0x6e,0x61,0x6e,0x61

string.char

string.char (…)

接收 0 個或更多的整數(shù)(整數(shù)范圍:0~255),返回這些整數(shù)所對應的 ASCII 碼字符組成的字符串。當參數(shù)為空時,默認是一個 0。

如果上一章節(jié)有認真學習過了的話,這段話應該是很好理解的。實質上就是把計算機認識的一串數(shù)字,變成字符串變量,并且字符串內的數(shù)據(jù)就是要存的那串數(shù)據(jù)。

示例代碼:

點我快速測試下面的代碼

str1 = string.char(0x30,0x31,0x32,0x33)

str2 = string.char(0x01,0x02,0x30,0x03,0x44)

print(str1)

print(str2)

-->輸出(不可見字符用?代替)

--0123

--??0?D

請完成下面的任務:

已知一個字符串的每個字符在數(shù)組t中按順序排列 請根據(jù)t的值,打印出字符串內容(一行數(shù)據(jù)) 注:這個字符串存儲的不一定是可見的字符

點我快速測試下面的代碼

t = {0x79,0x6F,0x75,0x20,0x61,0x72,0x65,0x20,0x72,0x69,0x67,0x68,0x74}

print("真正的字符串內容:")

--補全代碼

string.byte

string.byte(s [, i [, j ] ])

返回字符 s[i]、s[i + 1]、s[i + 2]、······、s[j] 所對應的 ASCII 碼。i 的默認值為 1,即第一個字節(jié),j 的默認值為 i 。

這個函數(shù)功能剛好和前面的string.char相反,是提取字符串中實際的數(shù)值。

示例代碼:

點我快速測試下面的代碼

str = "12345"

print(string.byte(str,2))

print(str:byte(2))--也可以這樣

print(str:byte())--不填默認是1

-->輸出(十進制數(shù)據(jù))

--50

--50

--49

請完成下面的任務:

已知字符串s 請把s中代表的數(shù)據(jù),全部相加,并打印出來

點我快速測試下面的代碼

s = string.char(1,2,3,4,5,6,7,8,9)

print("s內數(shù)據(jù)的和是:")

--補全代碼

string.find

string.find(s, p [, init [, plain] ])

這個函數(shù)會在字符串s中,尋找匹配p字符串的數(shù)據(jù)。如果成功找到,那么會返回p字符串在s字符串中出現(xiàn)的開始位置和結束位置;如果沒找到,那么就返回nil。

第三個參數(shù)init默認為1,表示從第幾個字符開始匹配,當init為負數(shù)時,表示從s字符串的倒數(shù)第-init個字符處開始匹配。

第四個參數(shù)plain默認為false,當其為true時,只會把p看成一個字符串對待。

可能你會奇怪,第四個參數(shù)有什么存在的必要嗎?p不是本來就應該是個字符串嗎? 實際上,lua中的匹配默認意義是正則匹配,同時,這里的正則與其它語言也有些許不同。

由于篇幅有限,本節(jié)和下面的幾節(jié)涉及匹配內容時,均不會考慮正則的使用方法,Lua正則教程將會在最后幾節(jié)單獨詳細地列出來。

第四個參數(shù)為true時,便不會使用正則功能。

示例代碼:

點我快速測試下面的代碼

--只會匹配到第一個

print(string.find("abc abc", "ab"))

-- 從索引為2的位置開始匹配字符串:ab

print(string.find("abc abc", "ab", 2))

-- 從索引為5的位置開始匹配字符串:ab

print(string.find("abc abc", "ab", -3))

-->輸出

--1 2

--5 6

--5 6

請完成下面的任務:

已知字符串s,里面有很多相同的字符串 請找出字符串s中,所有字符串awsl的位置 使用print打印結果,結果一行一個 如字符串12awslawslaw,輸出3和7

點我快速測試下面的代碼

s = "12awsaslwlaawsllslllswasllalssawwlawslaw"

print("兩個awsl的位置分別是:")

--補全代碼

string.gsub

string.gsub(s, p, r [, n])

將目標字符串s中所有的子串p替換成字符串r。

可選參數(shù)n,表示限制替換次數(shù)。

返回值有兩個,第一個是被替換后的字符串,第二個是替換了多少次。

特別提示:這個函數(shù)的目標字符串s,也是支持正則的

下面是例子:

點我快速測試下面的代碼

print(string.gsub("Lua Lua Lua", "Lua", "hello"))

print(string.gsub("Lua Lua Lua", "Lua", "hello", 2)) --指明第四個參數(shù)

-->打印的結果:

-- hello hello hello 3

-- hello hello Lua 2

同樣的,我們也可以使用冒號來簡化語法,像下面這樣:

點我快速測試下面的代碼

s = "12345"

r = s:gsub("2","b")

print(r)

請完成下面的任務:

已知字符串變量s,請分別打印出(每種一行): 把字符串s中,前5個a,替換為b 把字符串s中,前3個c,替換為xxx 把結果打印出來,一行數(shù)據(jù)

點我快速測試下面的代碼

s = "asdicagydausckfugdaflgscdabgsdbahhacbshbsd"

print("s變換前的值:",s)

--補全代碼

正則匹配相關內容等待更新

跨文件調用

在編寫代碼時,隨著邏輯逐漸復雜,我們的代碼量也會變大。雖然有函數(shù)可以把一部分代碼邏輯封裝起來,但是所有代碼都放到一個文件里,顯然也不是個好辦法。

所以我們需要將一些代碼放到不同文件中,通過文件來區(qū)分這些代碼的功能。

比如我們有下面這個函數(shù):

---函數(shù)功能:

-- 生成從1-max的table

-- @輸入值:table的最大值

-- @返回: table結果

-- @例子: local list = getNumberList(10)

function getNumberList(max)

local t = {}

for i=1,max do

table.insert(t,i)

end

return t

end

我們新建一個文件叫tools.lua,把這個函數(shù)放進去,現(xiàn)在,整個文件如下面這樣:

tools.lua

---函數(shù)功能:

-- 生成從1-max的table

-- @輸入值:table的最大值

-- @返回: table結果

-- @例子: local list = getNumberList(10)

local function getNumberList(max)

local t = {}

for i=1,max do

table.insert(t,i)

end

return t

end

--手動返回一個table,包含了上面的函數(shù)

return {

getNumberList = getNumberList,

}

現(xiàn)在,我們封裝的這個函數(shù)就能在其他文件里被調用了,具體代碼如下:

--引用tools.lua文件,并加載

local tool = require("tools")

local list = tool.getNumberList(12)

當調用了require接口后,Lua虛擬機會自動加載你調用的文件,執(zhí)行文件的內容,然后返回你文件里return的結果。

為了更好地理解這段話,我們可以看下面兩個文件,其中run.lua是被運行的那個入口文件

test.lua

--以便一會兒返回使用的table

local temp = {}

--把全局變量a更改了

a = 1

--local變量無法被外部調用

--但是可以在文件內被調用

local b = 2

--文件在被require的時候,會被執(zhí)行

--把全局變量c更改了

c = a + b

--使函數(shù)在table里

function temp.addB()

--文件內部可以調用變量b

b = b + 1

return b

end

--返回table

return temp

run.lua

點我快速測試下面的代碼

local test = require("test")

print(a)--輸出1

print(b)--輸出nil,因為b是local變量

print(c)--輸出3

print(test.addB())--輸出3

print(test.addB())--輸出4

print(test.addB())--輸出5

同時,每個文件最多只會被require一次,如果有多個require,只有第一次會執(zhí)行

待添加

table -> sort排序 string -> 正則、gsub、find、match 迭代器 for xx in xx 、string.gmatch 元表 coroutine

↓各種接口↓

math庫 os庫 io庫 位運算 (>> <<) 雜項接口 debug庫 未完成,待完善。。。

柚子快報邀請碼778899分享:LuatOS學習筆記

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內容

本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19273549.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄