lua的学习
lua是什么
Lua是一中嵌入式的脚本语言。
Lua语言可以独立进行编程,但这不是其主要的使用方式。Lua虽然有动态、灵活的语法提供强大的功能,但并不像 Java、Python 等一样有一个完善的库(但仍存在一定数量的第三方库),这不是缺陷,而是和其定位有关。
Lua最典型的用法,是作为一个库,嵌入 到其他大型语言(称之为宿主语言 )的应用程序之中,为应用程序提供参数配置或逻辑描述等功能,带来前所未有的灵活性。
Lua常见的宿主语言有:C/C++,Java,.NET,甚至脚本语言如PHP,Ruby等。Lua与宿主语言的交互方式:宿主语言通过虚拟机调用Lua脚本中的变量和函数;Lua调用宿主语言中的变量和函数。
lua语言的特性
- 动态语言,可控的垃圾收集,支持数值、字符串、布尔、nil简单类型的基本运算
- 以哈希表为基础,以原型的方式,构建复杂的数据结构,和支持面向对象
- 支持宿主语言中自定义的数据类型的操作
- 将函数作为普通数据类型,支持词法定界、尾递归
- 通过协程的方式支持并发程序设计
lua的使用范围
lua除了编写魔兽世界的插件,还能做什么?可以用lua来写一些常用的程序,比如操作excel,比如定制一些查找。还可以把lua作为一种配置方式(类似ini文件或者cfg文件),因为 lua的表,可以达到非常复杂的配置功能,另外lua的解析速度要比xml快多了。当然lua主要用处还是作为游戏的脚本支持语言。
lua的基本内容
八种数据类型:nil,booleans,numbers,strings,functions(函数),userdata,threads(协程)
- 数值(number):内部以double表示--->算术运算符(+,-,*,/,^,%),关系运算符(>,<,<=,>=,==,~=)
- 字符串(string):总是以零结尾,但可以包含任意字符(包括零),因此并不等价于C字符串,而是超集---->连接运算符
- 布尔(boolean):只有true,false两个值------>逻辑运算符(and,or,not)
- 函数(function):Lua的关键概念之一。不简单等同于C的函数或函数指针。
- 表(table):异构的Hash表。Lua的关键概念之一。
- userdata:用户(非脚本用户)定义的C数据结构。脚本用户只能使用它,不能定义。
- 线程(thread):Lua协作线程(coroutine),与一般操作系统的抢占式线程不一样。
- nil:代表什么也没有,可以与C的NULL作类比,但它不是空指针。
表达式:算术、关系、逻辑、连接运算符
流程控制:ifthenelse,while,repeat,for,
核心:函数(函数闭包),表(元表),线程(协作线程)
数据结构:数组,矩阵和多维数组,列表,队列和双向队列,集合和包,字符串缓冲。
标准库:数学库,string库,IO库,操作系统库,Debug库
Lua虚拟机
Lua虚拟机内部有一个堆栈,Lua API提供了对其的操作,不仅有出入栈操作,还可以以数组的形式,通过索引值随机读写栈元素,这是双方交换数据的主要方式。
用宿主语言可以编写供Lua调用的函数,宿主语言需要遵守调用约定,从栈中取得参数,最后也将结果入栈。将宿主函数通过lua_register注册入Lua虚拟机(这一过程实质为向Lua语言添加全局变量),就可以被Lua语言所调用。
宿主语言也可以将Lua函数压栈,再将参数依次压栈,最后使用lua_call,完成对Lua函数的调用。
若Lua虚拟机堆栈里有N个元素,则可以用 1 ~ N 从栈底向上索引,也可以用 -1 ~ -N 从栈顶向下索引,一般后者更加常用。
堆栈的每个元素可以为任意复杂的Lua数据类型,堆栈中没有元素的空位,隐含为包含一个“空”类型数据。
lua的学习的更多相关文章
- lua本学习笔记功能
Lua本学习笔记功能 1. 函数返回 指定任务的主要功能是完成,在这种情况下,函数被用作调用语句.函数可以计算并返回值,在这种情况下,作为分配值表达式语句使用. 语法: funcationfunc_ ...
- GJM : Lua 语言学习笔记
Lua笔记 容易与C/C++整合 Lua所提供的机制是C所不善于的:高级语言,动态结构,简洁,易于测试和调试. Lua特有的特征: `1:可扩展性.卓越的扩展性导致了很多人将Lua用作搭建领域语言的工 ...
- [2017.02.07] Lua入门学习记录
#!/home/auss/Projects/Qt/annotated/lua -- 这是第一次系统学习Lua语言 --[[ 参考资料: 1. [Lua简明教程](http://coolshell.cn ...
- lua源代码学习(一)lua的c api外围实现
工作后,整个人已经比較松懈了.尽管一直在看lua的源代码.可是一直是比較零碎的时间,没有系统的整理,所以还是收获不多.由于近期工作也不是非常忙了,就想整理下lua的源代码学习的笔记.加深下印象,并分享 ...
- LUA table学习笔记
function printT( ... ) for i,v in ipairs(...) do print(i,v) end end t1={} t2={} t3={} table.insert(t ...
- Lua JSONRPC学习笔记
JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...
- lua 入门学习
-- 1.Hello world print( "--------------1--------------") print("Hello world"); - ...
- Lua 基础 -- 学习笔记
标签(空格分隔): Lua 1. Lua可以一次性给多个变量赋值 变量比赋值多,多的变量就赋值nil 变量比赋值少,多的赋值舍弃 local a, b, c = 1, 2, 3 print( a, b ...
- 【lua】lua安装学习
Lua 是用标准C语言编写并以源代码形式开放的一种轻量小巧的脚本语言,设计目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能. lua官网 http://www.lua.org/ 安装lua ...
随机推荐
- 剑指offer-面试题9.斐波拉契数列
题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...
- ASP.NET中连接数据库的各种方法
ASP.NET中连接数据库的各种方法 连接SQL数据库的方法:(一).在Web.Config中创建连接字符串:1.<add name="ConnectionString" c ...
- sqlite数据库方言配置
1. application.properties配置sqlite数据库 spring.datasource.url = jdbc:sqlite:C:/test/sqlite/DB/sqlite.db ...
- Starting httpd:Could not reliably determine the server's fully qualified domain name
#service httpd start #Starting httpd: httpd: Could not reliably determine the server's fully qualifi ...
- oracle 数据库学习
1.更改数据库用户名密码: alter user '用户名' identified by ’password'. 2.查看数据库有哪些用户:sqlplus system/password ;selec ...
- 求1+2+3+...+n的值,要求不能使用乘除法,for、while、if、else、switch、case、等关键字及条件判断语句(JAVA)
采用递归和三目表达式注意红色字体一定不能写成n-- 1 package com.hunag; public class Sum { static int sum; public static int ...
- Android系统五大布局详解Layout
我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前, 视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit ...
- mysql+php+pdo批量添加大数据
1.使用insert into插入 ini_set('max_execution_time','0');//限制超时时间,因为第一种时间较长,索性设为0不限制 $pdo = new PDO(" ...
- linux crontab设置
cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序.例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron来自动执行. 服务的启动和停止 ...
- Loader之一:基本原理
参考APIDEMO及http://developer.android.com/guide/components/loaders.html#app 1.Introduced in Android 3.0 ...