欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lua table類型學習筆記

 更新時間:2015年04月23日 10:08:41   投稿:junjie  
這篇文章主要介紹了Lua table類型學習筆記,本文講解了table的基礎知識和table庫函數(shù)的使用以及面向對象編程實例,需要的朋友可以參考下

關系表類型,這是一個很強大的類型。我們可以把這個類型看作是一個數(shù)組。只是 C語言的數(shù)組,只能用正整數(shù)來作索引; 在Lua中,你可以用任意類型的值來作數(shù)組的索引,但這個值不能是 nil。同樣,在C語言中,數(shù)組的內容只允許一種類型;在 Lua中,你也可以用任意類型的值來作數(shù)組的內容,nil也可以。

基本介紹

注意三點:
    第一,所有元素之間,總是用逗號 "," 隔開;
    第二,所有索引值都需要用 "["和"]" 括起來;如果是字符串,還可以去掉引號和中括號; 即如果沒有[]括起,則認為是字符串索引
    第三,如果不寫索引,則索引就會被認為是數(shù)字,并按順序自動從 1往后編;

例如:

復制代碼 代碼如下:

tt = {"hello" ,33}
value = 4
tab = {[tt] = "table",key = value, ["flag" ] = nil, 11}

print(tab[tt])
print(tab.key)
print(tab[1 ])


以上寫法都是對的。

look = {[www] = "ok"}這樣是不對的,www沒有賦值,所以默認為nil因此出錯table index is nil

復制代碼 代碼如下:

---
temp = 1
tab = {[temp] = 1, 11}

print(tab[temp]) --此時的結果是11,因為11沒有顯式對應的key,因此從1開始,如果前面定義了,則覆蓋其value
復制代碼 代碼如下:

---
temp = 2
tab = {[temp] = 1, 11}
temp = 1

print(tab[temp]) -- 結果是11,雖然定義時[temp] = 1,但是后來我們改變了temp的值,所以指向另外的key了


以上可知:

1.對于字符串,在{}定義時,可以key = value, 也可以["flag"] = nil,索引都是string類型,對于非nil類型變量(包括字符串),都可以[variable]=value的方式
2.使用table時,對于字符串,可以通過.的方式訪問,也可以通過[]方式訪問。tab[a],tab[b],只要a==b那么tab[a]可以訪問到tab[b]的值
3.不管定義索引時用的是常量還是變量,最終table中value的索引key是常量,不會隨變量的改變而變化該value的key

嵌套

復制代碼 代碼如下:

tb11= {tb12 = {bool = true}} -- simple, it's a table IN a table :)
-- Call magic!
print(tb11.tb12.bool ) -- works fine, since it's calling the key and value correctly.
print(tab11["tb12" ].bool ) --same as line 33
print(tab11.tb12 ["bool"]) --same as line 33
print(tab11["tb12" ]["bool"]) --same as line 33

修改table的value
復制代碼 代碼如下:

--Altering a table's content. Basically manipulating the values of the keys.
lucky= {john="chips" ,jane ="lemonade",jolene="egg salad" }

lucky.jolene = "fruit salad" --changed the value to "fruit salad" instead of "egg salad"
lucky.jerry = "fagaso food" -- adding a new key-value pair to the container lucky.
lucky.john = nil -- remove john from giving anything or from being a key.

table的易變性

復制代碼 代碼如下:

a = {}; b = a;
print(a == b)  --> true

c,d = {},{};

print(c == d) -->false

table庫函數(shù)使用
-----------------------------------------------------------
1. table.sort (table [, comp])
Sorts table elements in a given order, in-place, from table[1] to table[n], where n is the length of the table. If comp is given, then it must be a function that receives two table elements, and returns true when the first is less than the second (so that not comp(a[i+1],a[i]) will be true after the sort). If comp is not given, then the standard Lua operator < is used instead.
The sort algorithm is not stable; that is, elements considered equal by the given order may have their relative positions changed by the sort.

復制代碼 代碼如下:

name = {"you" ,"me", "him","bill" }
--table.sort - only works with arrays!
table.sort(name)
for k, v in ipairs( name) do
     print( k,v)
end
--table.sort uses callbacks. a function that is writtent to be called by a library function.
function cmp( a, b)
     if string.sub(a,2 ,2) < string.sub(b,2 ,2) then
          return true
     else
          return false
     end
end

table.sort(name, cmp)
for k, v in ipairs( name) do
     print( k,v)
end

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

Inserts element value at position pos in table, shifting up other elements to open space, if necessary. The default value for pos is n+1, where n is the length of the table so that a call table.insert(t,x) inserts x at the end of table t.

復制代碼 代碼如下:

--table.insert --an easy to copy a table to another table or adding elements to an array.!
foo = {"a" ,"c", "d"}
bar = {}
function printt( table)
    for i=1 ,#table do
         print(i,table [i ])
    end
end
print("before insert:" )
printt(foo)
table.insert(foo,2 ,"b")
print("after insert" )
printt(foo)

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

Given an array where all elements are strings or numbers, returns table[i]..sep..table[i+1] ··· sep..table[j]. The default value for sep is the empty string, the default for i is 1, and the default for j is the length of the table. If i is greater than j, returns the empty string.

復制代碼 代碼如下:

--table.concat does what it implies. Takes an array and concates to one string.
num = {1 ,2, 3,4,5 ,6}
print(table.concat (num ,"<"))

4. table.remove (table [, pos])

Removes from table the element at position pos, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value for pos is n, where n is the length of the table, so that a call table.remove(t) removes the last element of table t.

復制代碼 代碼如下:

abc = {"a" ,"b", "c"}
print(table.remove (abc ,2))
print("abc length = " .. #abc)

5. table.maxn (table)

Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.)
--table.maxn

復制代碼 代碼如下:

apple = {"a" ,"p",[ 5]="e"}
print(table.maxn (apple )) -- 5

duck = {[-2 ]=3,[- 1]=0}
print(table.maxn (duck )) -- 0

面向對象編程

復制代碼 代碼如下:

--note for a object to work, it needs a closure(inner function with an upvalue(a local value from a higher scope))
--note: the more closures made, the slower the program would run.
function mg1( n)
    local function get ()
         return n ;
    end
    local function inc (m )
        n = n +m ;
    end
    return {get = get, inc= inc}
end

object = mg1(50 )
print(object.get ())
print(object["get" ]())

object.inc(2 )
print(object.get ())

----------------------------------------
do
    local function get (o )
         return o.one
    end
    local function inc (self , two )
        self.one = self.one + two
    end
    function mg3 (one )
         return {one = one , get = get , inc = inc }
    end
end
a = mg3(50 )
a:get()
a.inc(a,2 )
print(a:get())

----------------------------------------
do
    local T = {};
    function T:get()
         return self.n ;
    end
    function T:inc(m)
        self.n = self.n + m ;
    end
    function mg4 ( n )
         return {n = n , get =T.get , inc =T.inc }
    end
end

c = mg4(30 )
print(c:get())
c:inc(4 )
print(c:get())

(完)

相關文章

  • Lua協(xié)同程序(COROUTINE)運行步驟分解

    Lua協(xié)同程序(COROUTINE)運行步驟分解

    這篇文章主要介紹了Lua協(xié)同程序(COROUTINE)運行步驟分解,本文著重分解協(xié)同程序的運行步驟,需要的朋友可以參考下
    2015-01-01
  • Lua中的基本數(shù)據(jù)類型詳細介紹

    Lua中的基本數(shù)據(jù)類型詳細介紹

    這篇文章主要介紹了Lua中的基本數(shù)據(jù)類型詳細介紹,本文詳細的講解了Lua中的8種基本數(shù)據(jù)類型,需要的朋友可以參考下
    2014-09-09
  • Lua中table的幾種構造方式詳解

    Lua中table的幾種構造方式詳解

    這篇文章主要介紹了Lua中table的幾種構造方式詳解,本文介紹了Lua調試工具LuaEditor、什么是table、創(chuàng)建一個table、初始化一個table等內容,需要的朋友可以參考下
    2014-09-09
  • Lua和Nginx結合使用的超級指南

    Lua和Nginx結合使用的超級指南

    這篇文章主要介紹了Lua和Nginx結合使用的指南,從數(shù)據(jù)轉換到API等各個方面均有涉及,超推薦!需要的朋友可以參考下
    2015-06-06
  • 在Lua程序中使用SQLite的教程

    在Lua程序中使用SQLite的教程

    這篇文章主要介紹了在Lua程序中使用SQLite的教程,包括建立連接到基本的查詢等一些操作,需要的朋友可以參考下
    2015-05-05
  • 獲取Lua表結構(table)數(shù)據(jù)實例

    獲取Lua表結構(table)數(shù)據(jù)實例

    這篇文章主要介紹了獲取Lua表結構(table)數(shù)據(jù)實例,本文使用lua_gettable函數(shù)獲取表結構,需要的朋友可以參考下
    2014-09-09
  • Lua腳本語言簡介

    Lua腳本語言簡介

    這篇文章主要介紹了Lua腳本語言簡介,Lua最著名的應用是在暴雪公司的網(wǎng)絡游戲WOW中, Lua腳本可以很容易的被C/C++代碼調用,也可以反過來調用C/C++的函數(shù),這使得Lua在應用程序中可以被廣泛應用,本文就是對Lua語言的詳細介紹,需要的朋友可以參考下
    2014-09-09
  • Lua中讓回調函數(shù)支持回調對象方法的解決方法

    Lua中讓回調函數(shù)支持回調對象方法的解決方法

    這篇文章主要介紹了Lua中讓回調支持對象方法,一般情況下,Lua中只支持回調一個函數(shù),本文方法實現(xiàn)可以回調一個對象的方法,需要的朋友可以參考下
    2014-12-12
  • Lua實現(xiàn)類繼承

    Lua實現(xiàn)類繼承

    這里給大家演示的是一個使用lua實現(xiàn)類繼承的示例,實現(xiàn)類繼承其實有很多種寫法,這里是本人常用的方法,推薦給大家。
    2015-03-03
  • 詳解Lua中的元表和元方法

    詳解Lua中的元表和元方法

    Lua中的元表(Metatable)和元方法(Metamethods)是Lua語言中的重要概念,它們允許我們對對象和操作進行自定義,本文講給大家詳細介紹一下Lua中的元表和元方法,需要的朋友可以參考下
    2023-09-09

最新評論