1.Json操作

local cjson = require "cjson"//解析json
local sampleJson = '{"name":"abc","age":"23","obj":{"array":[1,2,3]}}';
local data = cjson.decode(sampleJson);
print('name=' .. data["name"]);
print('array[1]=' .. data["obj"]["array"][1]);//创建json
local tjson = {};
tjson["abc"] = 1;
print("jsondata:" .. cjson.encode(tjson));

2.字符串操作

-- 字符串分割
-- 参数str是你的字符串,比如"a|b|c"
-- 参数sep是分隔符,比如"|"
-- 返回值为["a","b","c"]
function SplitString(str, sep)local sep = sep or " "local result = {};local pattern = string.format("([^%s]+)", sep)local rs = string.gsub(str, pattern, function(c) result[#result + 1] = c end);return result
end--字符串替换操作
> string.gsub("aaaa","a","z",3);
zzza    3-- 等等其他用法

3.table操作

序号 方法 & 用途
1 table.concat (table [, sep [, start [, end]]]):

concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。

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

在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.

3 table.maxn (table)

指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)

4 table.remove (table [, pos])

返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。

5 table.sort (table [, comp])

对给定的table进行升序排序。

fruits = {"banana","orange","apple"}
-- 返回 table 连接后的字符串
print("连接后的字符串 ",table.concat(fruits))-- 指定连接字符
print("连接后的字符串 ",table.concat(fruits,", "))-- 指定索引来连接 table
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))连接后的字符串     bananaorangeapple
连接后的字符串     banana, orange, apple
连接后的字符串     orange, apple-- table最大值
function table_maxn(t)local mn=nil;for k, v in pairs(t) doif(mn==nil) thenmn=vendif mn < v thenmn = vendendreturn mn
end
tbl = {[1] = 2, [2] = 6, [3] = 34, [26] =5}
print("tbl 最大值:", table_maxn(tbl))
print("tbl 长度 ", #tbl)
-- 结果
tbl 最大值:    34
tbl 长度     3--当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。--可以使用以下方法来代替:
function table_leng(t)local leng=0for k, v in pairs(t) doleng=leng+1endreturn leng;
end

4.创建lua类

__newindex 元方法用来对表更新,__index则用来对表访问 。

--声明,这里声明了类名还有属性,并且给出了属性的初始值。
LuaClass = {x = 0, y = 0}--这句是重定义元表的索引,就是说有了这句,这个才是一个类。
LuaClass.__index = LuaClass--构造体,构造体的名字是随便起的,习惯性改为New()
function LuaClass:New(x, y) local self = {};    --初始化self,如果没有这句,那么类所建立的对象改变,其他对象都会改变setmetatable(self, LuaClass);  --将self的元表设定为Classself.x = x;self.y = y;return self;    --返回自身
end--测试打印方法--
function LuaClass:test() logWarn("x:>" .. self.x .. " y:>" .. self.y);
end

--创建LuaClass 对象local lc1 = LuaClass:New(1, 2);lc1:test();local lc2 = LuaClass:New(3, 4);lc2:test();

__newindex元方法:

mymetatable = {}
mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable })print(mytable.key1)mytable.newkey = "新值2"
print(mytable.newkey,mymetatable.newkey)mytable.key1 = "新值1"
print(mytable.key1,mymetatable.key1)--以上实例执行输出结果为:
value1
nil    新值2
新值1    nil

5.lua中.和:的区别

--冒号:在定义时省略了self
--点号:在定义时不省略selfClass = {}
Class.__index = Classfunction Class.new(x,y)local cls = {}setmetatable(cls, Class)cls.x = xcls.y = yreturn cls
end-- 实例方法function Class:test()print(self.x,self.y)
end-- 等价于
function Class.test(self)print(self.x,self.y)
endfunction Class.testStatic() --类似于静态方法print('abc')--(self无法识别:静态方法里不是访问非静态)
endobject = Class.new(10,20)object:test()
-- 等价于
object.test(object)

Unity tolua 常用方法相关推荐

  1. Unity API常用方法和类学习笔记2

    Unity API常用方法和类学习笔记2 ------Mathf & Input & Vector & Random 类Mathf 一.静态变量 print(Mathf.Deg ...

  2. Unity tolua问题记录

    文章目录 1.导入包后类名有与原文件重复的怎么办? 2.Scene 'LuaUIScene' couldn't be loaded because it has not been added to t ...

  3. Unity API常用方法和类学习笔记1

    Unity API常用方法和类学习笔记1 ------主要构架(Unity-Engine.GameObject.Component) 事件 一.事件执行顺序 二.测试代码 using System.C ...

  4. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记02

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记02 课时10 GameObject.Component和Object的千丝万缕的关系 一个游戏由多个场景组成,一个场景 ...

  5. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记03

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记03 课时18-20协程及其执行 1.使用Coroutine实现颜色动画渐变 void Update(){if (Inp ...

  6. tolua打包Android后路径出错,unity+tolua 64位android崩溃排查过程记录

    最近项目上线googleplay,需要打64位包,由于unity l2cpp打包比mono慢很多,因此前期开发过程中都是用的mono打的32位包进行测试.结果64位包出来后发生各种莫名其妙的卡死,尤其 ...

  7. Unity ToLua 中Update的调用流程

    1.首先注册Lua中的update函数 LuaState.cs 其中的OpenBaseLuaLibs() public void Start(){ #if UNITY_EDITORbeStart = ...

  8. Unity toLua加载lua的流程

    1.Unity加载Lua文件的流程 Unity中我们要加载Lua文件调用的函数是:LuaState类中的DoFile("xxx").我们可以看到流程是: LuaState:DoFi ...

  9. Unity Dotween常用方法详解

    Dotween是unity里非常常用的插件,下面我就针对一些相对常用的方法,做下总结: 一.Unity常用组件拓展方法 (1) Transform拓展方法 <1>Position 1)改变 ...

最新文章

  1. Android 依赖库发布(上传 Library 到 JCenter)gradle最高支持4.4
  2. 事半功倍的AI智能“同事” 天猫精灵新品全测评
  3. Android动态获取权限
  4. mysql 1个月多少天_在MySQL日期间隔中,1个月是否与30天相同? 1个季度与3个月相同吗?等等?...
  5. 看看阿里的考核尺度, 阿里人工资高是有原因的
  6. 开发人员能力不足的情况下如何推进敏捷开发?
  7. linux 服务器 iptables 防止arp病毒,Linux下防御ARP病毒攻击
  8. 磁珠 符号_贴片磁珠功能_贴片磁珠应用
  9. 华润置地php面试题_从一流到顶流|2020华润置地与沈阳一起美好
  10. Spark GraphX 的数据可视化
  11. Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
  12. Sql Function defference returns and returns
  13. oss读取指定文件夹下所有图片
  14. IE10 CSS hack
  15. 最大的PHP开源网店系统ECShop简介
  16. 面试经验 - 面试官让你问问题,你该问什么?
  17. 嵌入式开发是什么,与纯软件什么区别?
  18. 有声音显示音频服务器,Win7右下角声音图标显示音频服务未运行的解决方法小结...
  19. php api 接口
  20. 利用计算机教学的好处,计算机基础课程的重要性

热门文章

  1. Android字体加粗,UI小姐姐说太粗了,解决办法
  2. 学习pathon的几大步骤
  3. Android Room的使用
  4. 论文精度MISC: A MIxed Strategy-Aware Model Integrating COMET for Emotional Support Conversation
  5. phpwind 安装教程图文说明
  6. kinit什么意思_kerberos入坑指南
  7. PEEKABOO——alpha冲刺置顶集合随笔
  8. Druid java.sql.SQLException: connection holder is null
  9. nginx配置反向代理和负载均衡完结篇
  10. nginx代理本地JBoss访问吃力的问题