--[[在默認(rèn)情況下,變量總是認(rèn)為是全局的,全局變量不需要聲明呀枢,給
一個(gè)變量賦值后即創(chuàng)建了這個(gè)全局變量缕减,訪問一個(gè)沒有初始化的全局變量也不會(huì)
出錯(cuò),只不過得到的結(jié)果是:nil捞奕,如果你想刪除一個(gè)全局變量牺堰,只需要將變量
復(fù)制為nil,這樣變量b就好像從沒被使用過一樣]]
--示例如下:
--[[b=nil
print (b)--b已被刪除]]
--使用type函數(shù)來獲取數(shù)據(jù)的類型
--示例如下:
--[[print(type("hello world"))
print(type(9.98))
print(type(print))
print(type(true))
print(type(nil))
print(type(type(x)))]]
--[[輸出結(jié)果為:
string
number
function
boolean
nil
string
]]
--[[對(duì)于全局變量和table颅围,nil還有一個(gè)“刪除“的作用伟葫,給全局變量或者table
表里的變量賦一個(gè)nil值,等同于把它們刪除]]
--示例如下:
--[[tab={key1="value1",key2="value2","value3"}
for k,v in pairs(tab) do
print(k.."--"..v)--k后面的..和v前面的..是固定的院促,不能換成其他符號(hào),因?yàn)樵贚ua中..用來連接兩個(gè)字符串
end
tab.key1=nil
for k,v in pairs(tab) do
print(k.."--"..v)
end]]
--[[輸出結(jié)果為:
1--value3
key1--value1
key2--value2
1--value3
key2--value2
]]
--nil作比較時(shí)應(yīng)該加上雙引號(hào)”
--示例如下:
--[[print(type(x)==nil)
print(type(x)=="nil")]]
--[[輸出結(jié)果為:
false
true
]]
--Lua把false和nil看作是“假"筏养,其他的都為“真“
--示例如下:
--[[if false or nil then
print("至少有一個(gè)是true")
else
print("false和nil都為false")
end]]
--[[輸出結(jié)果為:
false和nil都為false
]]
--Lua默認(rèn)只有一種number類型double(雙精度)類型
--示例如下:
--[[print(type(2))
print(type(2.2))
print(type(2e-1))]]
--[[輸出結(jié)果為:
number
number
number
]]
--字符串由一對(duì)雙引號(hào)或單引號(hào)來表示,也可以用2個(gè)方括號(hào)[[]]來表示一塊字符串
--示例如下:
--html = [[
--[[<html>
<head></head>
<body>
<a >菜鳥教程</a>
</body>]]
--</html>]]
--print(html)
--[[輸出結(jié)果為:
<html>
<head></head>
<body>
<a >菜鳥教程</a>
</body>
</html>
]]
--在對(duì)一個(gè)數(shù)字字符串進(jìn)行算術(shù)操作時(shí)常拓,Lua會(huì)嘗試將這個(gè)數(shù)字字符串轉(zhuǎn)成一個(gè)數(shù)字
--示例如下:
--[[print("2"+6)
print("2"+"6")]]
--[[輸出結(jié)果為:
8
8
]]
--字符串連接使用的是..
--示例如下:
--[[print("a".."b")
print(123 .. 456)--注意這里的數(shù)字和..之間有空格了渐溶,不然會(huì)報(bào)malformed number near '123..456'錯(cuò)誤
]]
--[[輸出結(jié)果為:
ab
123456
]]
--使用#來計(jì)算字符串的長(zhǎng)度,放在字符串前面
--示例如下:
--[[str="hello world"
print(#str)
print(#"hello world")]]
--[[輸出結(jié)果為:
11
11
]]
--表(table)的創(chuàng)建,最簡(jiǎn)單的表達(dá)式是{}弄抬,用來創(chuàng)建一個(gè)空表茎辐,也可以在表里添加一些數(shù)據(jù),直接初始化表
--示例如下:
--[[local tab={}
local tab1={"1","2","3"}
for k in pairs(tab1) do
print(k)
end]]
--[[輸出結(jié)果為:
1
2
3
]]
--table其實(shí)是一個(gè)”關(guān)聯(lián)數(shù)組“,數(shù)組的索引可以是數(shù)字或者是字符串
--示例如下:
--[[a={}
a["key"]="value"
key=10
a[key]=22
a[key]=a[key]+11
for k, v in pairs(a) do
print(k.."--"..v)
end]]
--[[輸出結(jié)果為:
key--value
10--33
]]
--不同于其他語(yǔ)言的數(shù)組把0作為數(shù)組的初始索引拖陆,在Lua里表的默認(rèn)初始索引一般以1開始
--[[local tab={"1","2","3"}
for key in pairs(tab) do
print("key:",key)--逗號(hào)在這里相當(dāng)于制表符
end]]
--[[輸出結(jié)果為:
key: 1
key: 2
key: 3
]]
--table不會(huì)固定長(zhǎng)度大小弛槐,有新數(shù)據(jù)添加時(shí)table長(zhǎng)度會(huì)自動(dòng)增長(zhǎng),沒初始的table都是nil
--[[a={}
for i=1,10 do
a[i]=i
end
a["key"]="val"
print(a["key"])
print(a["key1"])
print(a[4])
print(a[9])]]
--[[輸出結(jié)果為:
val
nil
4
9
]]
--函數(shù)被看作是第一類值慕蔚,函數(shù)可以存在變量里
--示例如下:
--[[function lianxi(a)
if a==0 then
return a
else
return a+lianxi(a-1)
end
end
print(lianxi(1))
print(lianxi(2))
bianliang=lianxi--這里用一個(gè)變量來存放函數(shù)
print(bianliang(3))]]
--[[輸出結(jié)果為:
1
3
6
]]
--function可以以匿名函數(shù)的方式通過參數(shù)傳遞
--示例如下:
--[[function testFun(tab,fun)
for k,v in pairs(tab) do
print(fun(k,v))
end
end
tab={key="value",key1=22}
testFun(tab,
function(k,v)--匿名函數(shù)
return "我是匿名函數(shù):"..k.."--"..v
end
)]]
--[[輸出結(jié)果為:
我是匿名函數(shù):key--value
我是匿名函數(shù):key1--22
]]
--[[在Lua里丐黄,最主要的線程是協(xié)同程序(coroutine)。它和線程(thread)差不多孔飒,擁有自己
獨(dú)立的棧灌闺,局部變量和指令指針,可以跟其他協(xié)同程序共享全局變量和其他大部分東西
線程和協(xié)程的區(qū)別:線程可以同時(shí)多個(gè)運(yùn)行坏瞄,而協(xié)程任意時(shí)刻只能運(yùn)行一個(gè)桂对,并且處于
運(yùn)行狀態(tài)的協(xié)程只有被掛起(suspend)時(shí)才會(huì)暫停]]
--[[userdata是一種用戶自定義數(shù)據(jù),用于表示一種由應(yīng)用程序或c/c++語(yǔ)言庫(kù)索創(chuàng)建的類型,
可以將任意c/c++的任意數(shù)據(jù)類型的數(shù)據(jù)(通常是struct和指針)存儲(chǔ)到Lua變量中調(diào)用]]
--[[Lua變量有三種類型:全局變量鸠匀,局部變量蕉斜,表中的域;
Lua中的變量全是全局變量缀棍,哪怕是語(yǔ)句塊或是函數(shù)里宅此,除非用local顯式聲明為局部變量;
局部變量的作用域從聲明位置開始到所在語(yǔ)句塊結(jié)束爬范;
變量的默認(rèn)值均為nil]]
--示例如下:
a=5--全局變量
--[[local b=5--局部變量
function fun()
c=5--全局變量
local d=5--局部變量
end
fun()
print(c,d)
do
local a=6--局部變量
b=6--對(duì)全局變量重新賦值
print(a,b)
end
print(a,b)]]
--[[輸出結(jié)果為:
5 nil
6 6
5 6
]]
--[[Lua可以對(duì)多個(gè)變量同時(shí)賦值父腕,變量列表和值列表的各個(gè)元素用逗號(hào)分開,賦值
語(yǔ)句右邊的值會(huì)一次賦給左邊的變量青瀑。遇到賦值語(yǔ)句Lua會(huì)計(jì)算右邊所有的值然后
再執(zhí)行賦值2操作]]
--示例如下:
--[[a,b=22,'abcd'
print(a..b)]]
--[[輸出結(jié)果為:
22abcd
]]
--[[當(dāng)變量的個(gè)數(shù)和值的個(gè)數(shù)不一致時(shí):
變量個(gè)數(shù)>值的個(gè)數(shù) 按變量個(gè)數(shù)補(bǔ)足nil
變量個(gè)數(shù)<值的個(gè)數(shù) 多余的值會(huì)被忽略]]
--示例如下:
--[[a,b,c=0,1
print(a,b,c)
a,b,c=1,2,3,4
print(a,b,c)]]
--[[輸出結(jié)果為:
0 1 nil
1 2 3
]]
--[[多值賦值還可以獲取函數(shù)調(diào)用返回的值璧亮,比如a,b=f(),其中f()返回兩個(gè)值斥难,
第一個(gè)賦給a枝嘶,第二個(gè)賦給b]]
--[[應(yīng)該盡可能的使用局部變量,有兩個(gè)好處:
1.避免命名沖突
2.訪問局部變量的速度比全局變量更快]]
--對(duì)table的索引使用[]或者是.操作
--示例如下:
--[[site={}
site["key"]="我是值"
print(site["key"])
print(site.key)]]
--[[輸出結(jié)果為:
我是值
我是值
]]
--Lua中0為true
--示例如下:
--[[if 0 then
print('0是true')
else
print('0是false')
end]]
--[[輸出結(jié)果為:
0是true
]]
--[[函數(shù)可以設(shè)定范圍哑诊,默認(rèn)情況下是全局函數(shù)群扶,局部函數(shù)用local進(jìn)行修飾,
函數(shù)返回值可以有多個(gè)镀裤,每個(gè)值用逗號(hào)隔開穷当,
Lua中我們可以將函數(shù)作為參數(shù)傳遞給函數(shù),
Lua函數(shù)可以接受可變數(shù)目的參數(shù)淹禾,在函數(shù)參數(shù)列表中使用...表示函數(shù)有可變的參數(shù)馁菜,
調(diào)用select時(shí),必須傳入一個(gè)固定實(shí)參selector(選擇開關(guān))和一系列變長(zhǎng)參數(shù)铃岔。如果
selector為數(shù)字n,那么select返回它的第n個(gè)可變實(shí)參汪疮,否則只能為字符串"#",這樣
select會(huì)返回變長(zhǎng)參數(shù)的總數(shù)]]
--示例如下:
--[[function foo(...)
print(select('#',...))
for i = 1, select('#', ...) do -->獲取參數(shù)總數(shù)
local arg = select(i, ...); -->讀取參數(shù)
print("arg", arg);
end
end
foo(1,2,3,4)]]
--[[輸出結(jié)果為:
4
arg 1
arg 2
arg 3
arg 4
]]
--#能夠輸出table中的個(gè)數(shù)或者是字符串的長(zhǎng)度
--[[tab={"1","2","3","4"}
print(#tab)
print(#"hello")]]
--[[輸出結(jié)果為
4
5
]]
--Lua中不等于是~=
--示例如下:
--[[if(3~=4) then
print("3不等于4")
end]]
--[[輸出結(jié)果:
3不等于4
]]
--邏輯運(yùn)算符:and,or,not
--示例如下:
--[[if(3==3 and 4==4) then
print("and滿足了")
end
if(3==3 or 4==4) then
print("or滿足了")
end
if(not 4~=4) then
print("not滿足了")
end]]
--[[輸出結(jié)果為:
and滿足了
or滿足了
not滿足了
]]
--字符串的三種表示方式
--示例如下:
--str='hello,world'
--str1="hello,world"
--str2=[["hello,world"]]
--[[print(str)
print(str1)
print(str2)]]
--[[輸出結(jié)果為:
hello,world
hello,world
"hello,world"
]]
--默認(rèn)情況下數(shù)組的下標(biāo)是從1開始的峭火,但是可以自己設(shè)置數(shù)組的下標(biāo)
--示例如下:
--[[array={}
for i=-2,2 do
array[i]=i+10
end
for i=-2,2 do
print(array[i])
end]]
--[[輸出結(jié)果為:
8
9
10
11
12
]]
--Lua迭代器,k, v為變量列表智嚷;pairs(t)為表達(dá)式列表
--示例如下:
--[[t={a="2",b="22",c="12",d="9"}
for k, v in pairs(t) do
print(k, v)
end]]
--[[輸出結(jié)果為:可以看到輸出結(jié)果默認(rèn)還排序了
a 2
d 9
c 12
b 22
]]
--module.lua文件放在lua軟件的安裝路徑下
--[[module.lua文件中的內(nèi)容如下:
module={}
module.changliang="我是module中的一個(gè)常量"
function module.fun1()
return "我是module中的fun1"
end
function module.fun2()
return "我是module中的fun2"
end
return module
]]
--[[
require("module")--導(dǎo)入模塊
print(module.changliang)
print(module.fun1())
print(module.fun2())
]]
--[[輸出結(jié)果為:
我是module中的一個(gè)常量
我是module中的fun1
我是module中的fun2
]]
lua腳本語(yǔ)言的使用記錄
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門弦撩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人论皆,你說我怎么就攤上這事益楼。” “怎么了点晴?”我有些...
- 文/不壞的土叔 我叫張陵感凤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我粒督,道長(zhǎng)陪竿,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任坠陈,我火速辦了婚禮,結(jié)果婚禮上捐康,老公的妹妹穿的比我還像新娘仇矾。我一直安慰自己,他們只是感情好解总,可當(dāng)我...
- 文/花漫 我一把揭開白布贮匕。 她就那樣靜靜地躺著,像睡著了一般花枫。 火紅的嫁衣襯著肌膚如雪刻盐。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼听想,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼腥刹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汉买,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衔峰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蛙粘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垫卤,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年组题,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葫男。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站边翼,受9級(jí)特大地震影響鱼响,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜组底,卻給世界環(huán)境...
- 文/蒙蒙 一丈积、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧债鸡,春花似錦江滨、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棺弊,卻和暖如春晶密,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背模她。 一陣腳步聲響...
- 正文 我出身青樓连锯,卻偏偏與公主長(zhǎng)得像归苍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子运怖,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 成長(zhǎng)記錄-連載(三十六) ——我的第一篇五千字長(zhǎng)文,說了什么咏连,你一定想不到 并不是不想每天寫公眾號(hào)盯孙,而是之前思考怎...
- 1. 在App中引入腳本的原因: 如何處理UI變化 如何處理邏輯變化 如何解決數(shù)據(jù)源不靈活的問題 Objectiv...
- conn=redis.StrictRedis(connection_pool=config_manager_lis...
- 今天想寫一下…,很久不用的一個(gè)APP,是回答知識(shí)類的…垄懂,打開一看…骑晶,有提示,發(fā)現(xiàn)有人罵我…草慧,詛咒我……桶蛔,…看了以后...