lua进阶(一)
第一章 概览
1、chunks
chunks是一系列语句, lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个chunks。
2、全局变量
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,全局变量的初始值为
print(b) -->nil
b = 10
print(b) -->10
3、词法约定
Lua保留字
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
Lua是大小写敏感的。
注释: 单行注释: --
多行注释: –[[ –]]
--[[
-- comment
--]]
4、命令行方式
第二章 类型和值
Lua是动态类型语言,变量不要类型定义。 Lua中有8个基本类型:nil、boolean、 number、
string、userdata、function、thread、和table,函数type可以测试变量或者值的类型
1、Nil lua的特殊类型, 只有一个值 nil
2、Booleans 取值false true
3、Numbers 表示实数,Lua中没有整数。
4、Strings 指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。
string和其他对象一样,Lua自动进行内存分配和释放
可以使用单引号或者双引号表示字符串
a = "a line"
b = 'another line‘
转义
\a bell
\b back space -- 后退
\f form feed -- 换页
\n newline -- 换行
\r carriage return -- 回车
\t horizontal tab -- 制表
\v vertical tab
\\ backslash -- "\"
\" double quote -- 双引号
\' single quote -- 单引号
\[ left square bracket -- 左中括号
\] right square bracket -- 右中括号
例子:
> print("one line\nnext line\n\"in quotes\", 'in quotes'")
one line
next line
"in quotes", 'in quotes'
> print('a backslash inside quotes: \'\\\'')
a backslash inside quotes: '\'
> print("a simpler way: '\\'")
a simpler way: '\'
5、Functions
函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数
的参数,也可以作为函数的返回值。
6、Userdata and Threads
userdata可以将C数据存放在Lua变量中,userdata在Lua中除了赋值和相等比较外
没有预定义的操作。userdata用来描述应用程序或者使用C实现的库创建的新类型。
第三章 表达式
Lua中的表达式包括数字常量、字符串常量、变量、一元和二元运算符、函数调用。
还可以是非传统的函数定义和表构造。
1、算数运算符
二元运算 + – * / ^ (幂)
一元运算 –(负值)
2、关系运算
< > <= >= == ~=
3、逻辑运算
and or not
4、连接运算
.. --两个点
print("Hello ".. "World") --> Hello World
print(0 .. 1) --> 01
5、优先级
从高到低的顺序:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
6、表的构造
构造器是创建和初始化表的表达式,{}构建一个空表,
可以直接初始化数组
构造函数可以使用任何表达式初始化
构造结构体 record
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}
tab = {math.sin(1), math.sin(2), math.sin(3), math.sin(4),
math.sin(5),math.sin(6), math.sin(7), math.sin(8)}
for k, v in pairs(days) do
print(v)
end
for k, v in pairs(tab) do
print(v)
end
--record
a ={x = 23,y= 39} -- a ={} a.x = 0 a.y=0
print(a.x,a.y)
第四章 基本语法
1、赋值语句
赋值是改变一个变量的值和改变表域的最基本方法
a = "hello".."world"
t ={n=2,m=0}
t.n = t.n + 1 x = 3
a,b = 10, 2 * x
print(a,b)
2、局部变量与代码块(block)
使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块
内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那
个文件或者文本串)。
x = 10
locali = 1 -- local to the chunk
whilei<=x do
localx = i*2 -- local to the while body
print(x) --> 2, 4, 6, 8, ...
i = i + 1
end
ifi > 20 then
localx -- local to the "then" body
x = 20
print(x + 2)
else
print(x) --> 10 (the global one)
end
print(x) --> 10 (the global one)
3、控制结构语句
条件控制
print("enter a number")
n = io.read("*number")
if n > 0 then
print(n.." bigger than zero")
elseif n > 100 then
print(n.." bigger than 100")
else
print(n.." smaller than zero")
end -- remember the end
循环控制
n = 3 while n > 0 do
print(n)
n = n - 1
end n = 3
repeat
print(n)
n = n -1
until n < 0 m = 0
for i = 1, 10, 1 do
m = m + i
print(i * m)
end
范型for循环
month ={"Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"}
for k,v in pairs(month) do
print(k,v)
end
for k,y in ipairs(month) do
print(k,month[k])
endbreak和return
break语句用来退出当前循环(for,repeat,while)。在循环外部不可以使用。
return 用来从函数返回结果,当一个函数自然结束结尾会有一个默认的return。(这
种函数类似pascal的过程)
n = 3
while 1 > 0 do
print(n)
n = n - 1
if n < 0 then
break
end
end function max(x,y)
if x > y then
return x
else
return y
end
end print(max(23,0))
lua进阶(一)的更多相关文章
- [置顶] lua 进阶3--lua文件中调用C++函数
前面讲了一下,C++读取lua文件中的变量,包括一维表.二维表这些,这节讲一下如何在lua文件中去调用C++函数 C++代码如下 #include <stdio.h> extern &qu ...
- lua进阶(二)
第五章 函数 函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用:2.计算并 返回值,这种情况下函数作为赋值语句的表达式使用. function function_name( . ...
- Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...
- cocos进阶教程(1)Lua调用自定义C++类和函数的最佳实践
第一层:纯C环境下,把C函数注册进Lua环境 a.lua 文件 )) a.c 文件 #include <lua.h> #include <lualib.h> #include ...
- Redis进阶实践之七Redis和Lua初步整合使用
一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当 ...
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
一.引言 学习Redis也有一段时间了,感触还是颇多的,但是自己很清楚,路还很长,还要继续.上一篇文章简要的介绍了如何在Linux环境下安装Lua,并介绍了在Linux环境下如何编写L ...
- Redis进阶实践之十九 Redis如何使用lua脚本
一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入 ...
- Redis进阶之使用Lua脚本开发
1.在Redis中使用Lua 在Redis中执行Lua脚本有两种方法:eval和evalsha. (1)eval eval 脚本内容 key个数 key列表 参数列表 下面例子使用了key列表和参数列 ...
- Unity进阶----Lua语言知识点(2018/11/08)
国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...
随机推荐
- Altera SoC 内核更新3.7到3.10
为什么需要更新呢?其实是为了更好的搭建自己的开发环境,同时熟悉altera对代码的更新和管理方式,便于进一步的熟悉和了解altera SoC开发过程. 1.下载linux代码: git clone ...
- struts2页面上如何操作字符串
<s:if test="prodName.length()>15"><s:property value='prodName.substring(0,15)' ...
- OC基础(25)
NSNumber NSValue NSDate NSFileManager *:first-child { margin-top: 0 !important; } body > *:last-c ...
- 前端开发 Grunt 之 Connect
在前端开发过程中,我们需要在开发过程中,将开发中的站点部署到服务器上,然后,在浏览器中查看实际的效果,在 Grunt 环境下,可以直接使用集成在 Grunt 中的 Connect 插件完成站点服务器的 ...
- 【Unity Shaders】学习笔记——渲染管线
[Unity Shaders]学习笔记——Shader和渲染管线 转载请注明出处:http://www.cnblogs.com/-867259206/p/5595924.html 写作本系列文章时使用 ...
- 解决VS2008 开发Windows Mobile 项目生成速度慢的问题
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
- CDbConnectionExt.php 23.2实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置
<?php /** * 实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置. * 具体使用主数据库还是从数据库,使用如下规则: * 1.CDbComm ...
- A planning attack on a commuter train carriage in Taipei
Last night an explosion on a commuter train carriage in Taipei Songshan railway station wounded at l ...
- javaSE第八天
第八天 43 1. 如何制作帮助文档(了解) 43 2. 通过JDK提供的API学习了Math类(掌握) 44 (1)API(Application Programming Inte ...
- Cadence仿真利器,Cadence SI / PI Analysis – Sigrity安装及破解指南
Sigrity提供了丰富的千兆比特信号与电源网络分析技术,包括面向系统.印刷电路板(PCB)和IC封装设计的独特的考虑电源影响的信号完整性分析功能. Sigrity分析技术与Cadence Alleg ...