lua指令碼的基本語法(二)

2021-07-05 14:02:21 字數 4139 閱讀 9775

1.

語法約定

lua語句用分號結尾,不過如果不寫分號,lua也會自己判斷如何區分每條語句

如:a=1 b=a*2 --這樣寫沒有問題,但不太好看。

建議一行裡有多個語句時用分號隔開

變數名、函式名之類的命名規則與c語言一樣:由字母,下劃線和數字組成,但第乙個字元不能是數字。並且不能和lua的保留字相同。

lua是大小寫敏感的

使用兩個減號--作為單行注釋符,多行注釋使用--[[...--]]

2.

型別

lua是動態型別語言,變數不要型別定義。lua中有8個基本型別分別為:nil、boolean、number、string、userdata、function、thread和table。

同一變數可以隨時改變它的型別,如:

1.  a = 10                  --number

2.  a = "hello"             --string

3.  a = false               --boolean

4.  a =   --table

5.  a = print               --function

使用type函式可以得到變數當前的型別,如print(type(a));

nil         所有沒有被賦值過的變數預設值為nil,給變數賦nil可以收回變數的空間。

boolean     取值false和true。但要注意lua中所有的值都可以作為條件。在控制結構的條件中除了false和nil為假,其他值都為真。所以lua認為0和空串都是真。(注意,和c不一樣哦)

number      表示實數,lua中沒有整數。不用擔心實數引起的誤差,lua的numbers可以處理任何長整數。

string      字串,lua中的字串可以存放任何包括0在內的二進位制資料。可以使用單引號或雙引號表示字串,和c一樣使用\作為轉義符。也可以使用或 [[...]]表示字串,它可以表示多行,而且不解釋轉義符(也可以是[=[...]=]、[====]、...用於適應各種型別字串)。另外要注意的是lua中字串是不可以修改的。

function    函式,lua中的函式也可以儲存到變數中,可以作為其它函式的引數,可以作為函式的返回值。

table       表,表是lua特有的功能強大的東東,它是lua中唯一的一種資料結構,它可以用來描述陣列,結構,map的功能。

userdata    userdata型別用來將任意c語言資料儲存在lua變數中。例如:用標準i/o庫來描述檔案。

thread      執行緒。由coroutine表建立的一種資料型別,可以實現多執行緒協同操作。

3.

表示式

算術執行符: 加+、減-、乘*、除/、冪^

關係運算子:小於<、大於》、小於等於<=、大於等於》=、等於==、不等~=

邏輯運算子:與and、或or、非not

and和or的運算結果返回值是其中的運算元:

a and b        -- 如果a為false,則返回a,否則返回b

a or  b        -- 如果a為true,則返回a,否則返回b

所以c中的三元運算子a?b:c在lua中可以這樣寫:(a and b) or c

連線運算子:連續兩個小數點..,如:

"hello" .. "world"  結果是 "helloworld"

0 .. 1              結果是 "01",當在乙個數字後面寫..時,必須加上空格以防止被解釋錯。

取長度操作符:一元操作 #

字串的長度是它的位元組數,table 的長度被定義成乙個整數下標 n,它滿足 t[n] 不是 nil 而 t[n+1] 為nil。

4.

基本語法

賦值

a = a + 1

lua裡的賦值還可以同時給多個變數賦值。變數列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變數。如:

a, b = 10, 2*x    --相當於a=10; b=2*x

x, y = y, x        --交換x和y

如果賦值符左右個數不同時,lua會自動丟棄多餘值或以nil補足

區域性變數

local i = 10

使用local宣告區域性變數,區域性變數只在所在的**塊內有效。

如果不宣告,預設為全域性變數,這個變數在所有lua環境中有效。

**塊是指乙個控制結構內,乙個函式體,或者乙個chunk(變數被宣告的那個檔案或者文字串),也可以直接使用do...end(相當於c中的{})。條件

1.  if 條件 then

2.      then-part

3.  elseif 條件n then

4.      elseif-part

5.  ..                --->多個elseif

6.  else

7.      else-part

8.  end;

迴圈

lua中的迴圈有:while迴圈,repeat-until迴圈,for迴圈和for in迴圈。

迴圈中可以用break跳出,lua語法要求break和return只能是**塊的最後一句(放心,正常的**都是滿足這個要求的,break和 reuturn後面即使有**也是執行不到的,再說了,大不了自己加個do...end好了^_^)如:

1.  local i = 1

2.  while a[i] do

3.      if a[i] == v then break end

4.      i = i + 1

5.  end

while迴圈

1.  while condition do

2.      statements;

3.  end;

repeat-until迴圈:

1.  repeat

2.      statements;

3.  until conditions;

for迴圈

1.  for var=exp1,exp2,exp3 do

2.      loop-part

3.  end

for將用exp3作為step從exp1(初始值)到exp2(終止值),執行loop-part。其中exp3可以省略,預設step=1

for in迴圈

1.  for 變數 in 集合 do

2.      loop-part

3.  end

實際上,

for var_1, ..., var_n in explist do block end

等價於

1.  do

2.      local _f, _s, _var = explist

3.      while true do

4.          local var_1, ... , var_n = _f(_s, _var)

5.          _var = var_1

6.          if _var == nil then break end

7.          block

8.      end

9.  end 如:

1.  a = 

2.  for k,v in pairs(a) do print(k,v) end

5.

函式

1.  function 函式名 (引數列表)

2.      statements-list;

3.  end;

函式也可以一次返回多個值,如:

1.  function foo() return 'a','b','c'; end

2.  a,b,c = foo()

在lua中還可以直接定義匿名函式,如

print((function() return 'a','b','c' end)())

Lua基本語法 Redis使用Lua指令碼

lua 學習目標是 能寫一些 lua指令碼。redis 使用lua 5.1 版本。lua是動態型別語言。1.資料型別 空 nil 沒有賦值的變數或表的字段 都是nil 布林 boolean 包含 true 和 false 字串 string 如 a 或 a 表 table 既可以是 陣列 又可以是 ...

二 Lua 基本語法

上一節 一 lua 資料型別及表達示 本節內容要點 lua的基本語法賦值語句 a 10 name al ex 也可以同時對多個變數進行賦值,以變數的個數為基礎,沒有匹配的變數將會賦值為nil。如果賦值語句個數多餘變數個 數,則會忽略多餘的賦值語句 a b 10,20 a,b 10,20,30 a,b...

LUA學習(二) 基本語法

eg1 print hello world 輸出函式 hello world lua語句是解釋語言,邊編譯邊執行,每句不用分號結束。eg2 變數有值的時候才有型別,否則變數本身是無型別的 a 1 b abc c d print print type a print type b print type...