Lua的基礎(chǔ)知識(shí)

Lua建議的命名規(guī)則

常量用全大寫和下劃線孝偎,如:MY_CONSTANT;
變量第一個(gè)字母小寫,如:myVariable;
全局變量第一個(gè)字母用小寫g表示,如gMyGlobal;
函數(shù)名第一個(gè)字母大寫如: function MyFunction()

Lua變量

Lua變量命名的方式是直接寫涕刚,如:

myValue = 7
local value = 8

Lua變量默認(rèn)是全局的,若要使用局部的變量乙帮,則在前面加local關(guān)鍵字
Lua變量不需要在使用前聲明杜漠,但是這就導(dǎo)致很多變量無(wú)法追蹤,所以要避免寫出難以追蹤的變量

Lua控制結(jié)構(gòu)

在Lua中察净,任何控制結(jié)構(gòu)都會(huì)以end作為結(jié)束驾茴, 如:

// 判斷
if 條件 then
  執(zhí)行事件
else
   執(zhí)行事件
end
// while循環(huán)
while 條件 do 
  ...........................
  ...........................
end

Lua函數(shù)

函數(shù)的命名方式為

function 函數(shù)名(參數(shù)1,參數(shù)2............)
  函數(shù)內(nèi)容
  return 返回值      // 返回值可有可無(wú)氢卡,根據(jù)自己的需要而定
end

Lua的函數(shù)還有一個(gè)強(qiáng)大的功能沟涨,就是可以用(...)來(lái)代替參數(shù)列表,定義不定長(zhǎng)的參數(shù)列表, 如:

function HowMany(...)
  if arg.n > 0 then
    for indx = 1, arg.n do
      local myString = string.format("%s%d", "Argument", indx, ":")
      print(myString, arg[indx]}
    end
  else
    print("No variables entered.")
  end
end

return也可以返回多個(gè)返回值异吻,中間用逗號(hào)隔開,還可以返回函數(shù)

Lua對(duì)數(shù)的操作

一下都是標(biāo)準(zhǔn)庫(kù)中的東西

1.Lua的隨機(jī)數(shù)

math.random()可以傳入最大值和最小值來(lái)生成范圍內(nèi)的隨機(jī)數(shù),如:要生成1到10 的一個(gè)隨機(jī)數(shù)诀浪,應(yīng)該這樣寫:

math.random(1, 10)

2.Lua的最大最小

math.max() 和 math.min(),他們可以接受若干數(shù)字類型的參數(shù)棋返,來(lái)返回其中的最大值或者最小值。
在Lua中雷猪,由于大部分?jǐn)?shù)據(jù)都存在于Table中睛竣,所以使用函數(shù)處理起來(lái)會(huì)有一些挑戰(zhàn),因?yàn)槟阈枰裈able中的所有數(shù)據(jù)都加到函數(shù)中求摇。不過還好射沟, 我們可以創(chuàng)建字符串然后利用loading函數(shù)來(lái)解決這個(gè)問題,參考下面的示例:

function GetMin(theTable)
   myString = 'myValue = math.min('for index, value in ipairs(theTable) do
     myString = string.format("%s%d%s", myString, value, ",")
  end
--remove final comma
  myString = string.sub(myString, 1, string.len(myString) - 1)
--add final 
  myString = string.format("%s%s", myString, ')')
-- run the chunk
  loadstring(myString)()
  returen myValue
end

Lua字符串的操作

tonumber()函數(shù)与境,將字符串強(qiáng)制轉(zhuǎn)換為數(shù)字
tostring()函數(shù)验夯,把數(shù)字轉(zhuǎn)換成字符
string.char(n1, n2, ...)函數(shù)根據(jù)ASCII編碼返回傳入?yún)?shù)對(duì)應(yīng)的字符。這個(gè)函數(shù)不是很常用摔刁,但在Lua游戲保存文件中插入一個(gè)換行符的時(shí)候非常有用挥转,它可以讓文件更便于閱讀。例如:

myFile: write(string,char(10))  --writes out a linefeed to the open
file

string.len(myString)函數(shù)共屈,用來(lái)返回傳入字符串的長(zhǎng)度
string.sub(myString, start, end)函數(shù)返回位于start開始到end結(jié)束的指定的字符串
string.format()格式化輸出指定字符串
string.find(sourceString, findString)函數(shù)绑谣,在sourceString查找第一個(gè)符合findString字符的位置,如果找到了改目標(biāo)字符則返回它的開始和結(jié)束位置拗引,如果沒有則返回nil借宵。
string.gsub(sourceString, pattern, replacementString)函數(shù),把sourceString中符合pattern的字符串全部替換為replacementString并且返回新的字符串
string.gfind(sourceString, pattern)函數(shù)矾削,遍歷一個(gè)自字符串壤玫,一旦找到符合指定格式的子字符串就返回該子串

Lua的table數(shù)據(jù)結(jié)構(gòu)

table.getn(myTable)函數(shù), 返回table中元素的個(gè)數(shù)
table.insert(myTalbe, position, value)函數(shù)怔软, 在table中插入一個(gè)新的值垦细,位置參數(shù)是可選的,如果沒設(shè)定挡逼,會(huì)添加新的值到table末尾括改,如果指定了該值,則插入到指定的位置
table.remove(myTable, position)函數(shù)家坎, 從指定的table中刪除并返回一個(gè)元素嘱能,必要時(shí)重新索引table。如果沒有指定position的值虱疏,則默認(rèn)刪除table的最后一個(gè)元素

table的引用

table不僅能使用數(shù)字索引惹骂,還可以使用其他的值作為索引值。參考下面的示例:

myData = {}
myData.name = "Thardwick"
myData.class = "Barbarian"
myData.str = math.random(3, 18)
myData.dex = math.random(3, 18)

在這個(gè)例子中做瞪,我們使用名字作為索引值对粪,它們可以作為獲取table中值得關(guān)鍵字右冻。該table同樣還能使用數(shù)字索引,我們還能添加下面的數(shù)據(jù):

myData[1] = 17
myData[2] = 34
myData[3] = 24

這個(gè)方法給了我們很大的靈活性著拭,讓table不僅保存了很多屬性值纱扭,還可以保存數(shù)組, 并通過索引來(lái)訪問儡遮。

多維的table

在Lua中創(chuàng)建多維的table非常容易乳蛾。就是table中的table,即一個(gè)table元素又是一個(gè)table鄙币,和多維數(shù)組是一個(gè)道理肃叶,參考下面的示例:

widget = {}
widget.name = {}
widget.cost = {}
widget.name[1] = "Can opener"
widget.cost[1] = "$12.75"
widget.name[2] = "Scissors"
widget.cost[2] = "$8.99"
使用pairs()函數(shù)來(lái)遍歷table中的每一個(gè)元素,示例如下:
myNames = {"Fred", "Ethel", "Lucy", "Ricky", "Rockey", "Besty", "Bill" }
for index, value in pairs(myNames) do
  print(index, value)
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末十嘿,一起剝皮案震驚了整個(gè)濱河市因惭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌详幽,老刑警劉巖筛欢,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唇聘,居然都是意外死亡版姑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門迟郎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剥险,“玉大人,你說我怎么就攤上這事宪肖”碇疲” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵控乾,是天一觀的道長(zhǎng)么介。 經(jīng)常有香客問我,道長(zhǎng)蜕衡,這世上最難降的妖魔是什么壤短? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮慨仿,結(jié)果婚禮上久脯,老公的妹妹穿的比我還像新娘钾唬。我一直安慰自己鳄逾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布徒坡。 她就那樣靜靜地躺著万皿,像睡著了一般摧找。 火紅的嫁衣襯著肌膚如雪核行。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天蹬耘,我揣著相機(jī)與錄音钮科,去河邊找鬼。 笑死婆赠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佳励。 我是一名探鬼主播休里,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赃承!你這毒婦竟也來(lái)了妙黍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瞧剖,失蹤者是張志新(化名)和其女友劉穎拭嫁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抓于,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡做粤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捉撮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕品。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巾遭,靈堂內(nèi)的尸體忽然破棺而出肉康,到底是詐尸還是另有隱情,我是刑警寧澤灼舍,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布吼和,位于F島的核電站,受9級(jí)特大地震影響骑素,放射性物質(zhì)發(fā)生泄漏炫乓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一砂豌、第九天 我趴在偏房一處隱蔽的房頂上張望厢岂。 院中可真熱鬧,春花似錦阳距、人聲如沸塔粒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卒茬。三九已至船老,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圃酵,已是汗流浹背柳畔。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郭赐,地道東北人薪韩。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捌锭,于是被迫代替她去往敵國(guó)和親俘陷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程观谦,因...
    小菜c閱讀 6,358評(píng)論 0 17
  • Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE C...
    吃瓜的東閱讀 5,717評(píng)論 0 5
  • 1. 寫在前面 很多時(shí)候我們都需要借助一些腳本語(yǔ)言來(lái)為我們實(shí)現(xiàn)一些動(dòng)態(tài)的配置拉盾,那么就會(huì)涉及到如何讓腳本語(yǔ)言跟原生語(yǔ)...
    杰嗒嗒的阿杰閱讀 3,423評(píng)論 9 31
  • 1. 整體性學(xué)習(xí)技術(shù) 1.1 快速閱讀高效的學(xué)習(xí),首先要培養(yǎng)快速閱讀的技能豁状。 指讀法用手指快速掃描材料捉偏,以培養(yǎng)流暢...
    jabriel閱讀 182評(píng)論 0 0
  • 首先特別感謝狗熊哥的這次活動(dòng),給了我一次全新的挑戰(zhàn)和體驗(yàn)泻红,也認(rèn)識(shí)群里這些伙伴夭禽,很受他們鼓舞。這次比賽給我的不止一本...
    企企鵝鵝子閱讀 560評(píng)論 0 0