自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于LUA程序設(shè)計對象序列化學(xué)習(xí)筆記

移動開發(fā) iOS
關(guān)于LUA程序設(shè)計對象序列化學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要是來學(xué)習(xí)LUA中對象的序列化,具體內(nèi)容的詳解來看本文。

關(guān)于LUA程序設(shè)計對象序列化學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要是來學(xué)習(xí)LUA對象序列化,具體內(nèi)容的詳解來看本文。

通常需要序列化一些數(shù)據(jù),也就是將數(shù)據(jù)轉(zhuǎn)換為一個字節(jié)流或字符流,然后就可以將其方便的持久化。文本序列化可選擇的格式非常多:SOAP、Json甚至自定義xml等,不過lua腳本也是一個不錯的選擇方案。

本文在參考《Lua程序設(shè)計(第2版)》簡體中文版 詳解LUA腳本語言之?dāng)?shù)據(jù)文件與持久化 基礎(chǔ)上給出下面的實現(xiàn)。要注意的是該實現(xiàn)只能針對無環(huán)的table,并且不能對function、thread、userdata這三種類型進行序列化和反序列化。為了防止序列化后數(shù)據(jù)過大,也沒有做精細的排版控制。

  1. function serialize(obj)  
  2.     local lua = "" 
  3.     local t = type(obj)  
  4.     if t == "number" then  
  5.         lualua = lua .. obj  
  6.     elseif t == "boolean" then  
  7.         lualua = lua .. tostring(obj)  
  8.     elseif t == "string" then  
  9.         lualua = lua .. string.format("%q", obj)  
  10.     elseif t == "table" then  
  11.         lualua = lua .. "{\n"  
  12.         for k, v in pairs(obj) do  
  13.             lualua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"  
  14.         end  
  15.         local metatable = getmetatable(obj)  
  16.         if metatable ~= nil and type(metatable.__index) == "table" then  
  17.             for k, v in pairs(metatable.__index) do  
  18.                 lualua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"  
  19.             end  
  20.         end  
  21.         lualua = lua .. "}"  
  22.     elseif t == "nil" then  
  23.         return nil  
  24.     else  
  25.         error("can not serialize a " .. t .. " type.")  
  26.     end  
  27.     return lua  
  28. end  
  29.  
  30. function unserialize(lua)  
  31.     local t = type(lua)  
  32.     if t == "nil" or lua == "" then  
  33.         return nil  
  34.     elseif t == "number" or t == "string" or t == "boolean" then  
  35.         lua = tostring(lua)  
  36.     else  
  37.         error("can not unserialize a " .. t .. " type.")  
  38.     end  
  39.     lua = "return " .. lua  
  40.     local func = loadstring(lua)  
  41.     if func == nil then return nil end  
  42.     return func()  
  43. end  
  44.  
  45. data = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}}  
  46. print(serialize(unserialize(1)))  
  47. print(serialize(unserialize(serialize(data)))) 

小結(jié):關(guān)于LUA程序設(shè)計對象序列化學(xué)習(xí)筆記的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 網(wǎng)易博客
相關(guān)推薦

2009-11-17 16:32:54

PHP對象序列化

2011-08-25 10:35:14

Lua語言函數(shù)

2013-12-12 16:30:20

Lua腳本語言

2010-08-09 09:20:51

Flex程序設(shè)計

2011-08-23 17:33:08

LuaMetatable

2011-08-22 17:41:23

LUA 腳本 語言

2011-06-01 15:05:02

序列化反序列化

2011-08-23 16:22:45

Lua 4.0函數(shù)

2018-03-19 10:20:23

Java序列化反序列化

2011-07-05 15:22:04

程序設(shè)計

2011-07-05 15:59:57

面向?qū)ο缶幊?/a>

2011-07-05 16:05:43

面向?qū)ο缶幊?/a>

2014-04-16 11:39:52

2011-08-23 13:15:37

LUAPackage

2011-08-25 10:07:24

Lua 5.0函數(shù)編譯器

2009-06-14 22:01:27

Java對象序列化反序列化

2022-06-07 14:13:58

Simula編程語言GNU cim

2011-08-23 11:13:56

Lua

2012-04-13 10:45:59

XML

2011-06-01 14:26:11

序列化
點贊
收藏

51CTO技術(shù)棧公眾號