lua编程基础
1.目前最新的lua版本是lua5.2.3
2.官网下载地址:http://www.lua.org/ftp/
3.lua的初衷就是一个用于c/c++的小巧的脚本语言,本身是什么功能都没有的,需要手动用C++扩展它。
4.我们在实际的应用开发(基本上是游戏开发),通常是用C/C++实现功能,而用lua来实现逻辑。
5.lua是一个动态的脚本语言,动态是指程序在运行时可以改变其结构。
6.解压下载后的lua包发现,src全是用c语言开发的,因此可知其跨平台性非常良好
7.我们可以在目前的三大主流平台(win32,linux,Mac/ios)对其进行编译.
8.在linux和mac平台,可以在终端下,直接使用make命令对其编译,因为里面已经自带了编写好的Makefile,不过需要选择编译的平台:make linux ,或者:make macosx,而windows平台,没有make工具,因此可以使用VS工具,新建一个c语言工程,将所有的源代码(src)拷贝进去,也就可以直接编译成lua.lib了。
9.在linux平台和mac平台会生成两个可执行文件:lua和luac,我们可以自建一个bin目录,然后把这两个文件拷贝进去
10.lua是一个lua可执行程序,可以直接执行xx.lua文件,而luac是lua的编译器,可以将xx.lua编译成一个二进制的可执行程序,默认为:luac.out,此时可以用./lua luac.out来执行它
11.lua中的注释:
--表示单行注释
--[[
--]] (两对中括号+ --)表示多行注释
12.lua中所有的数字都是double,例如:num=58 --其中double占8个字节(64位),其中有52位,用于保存精确的int,因此对于52位以内的int,精度没有问题。
13.字符串的表示:
s = 'walternate' -- 像Python那样的不可变的字符串,用单引号括起来
t = "双引号也可以" --用双引号括起来
u = [[ 两个方括号
用于
多行的字符串。]] --多行的字符串的表示
t = nil -- 未定义的t,空串,Lua 支持自动垃圾回收,采用先标记后清除的垃圾回收算法
14.do/end之类的关键字标示出程序块:
while num < 50 do
num = num + 1 -- 没有 ++ or += 运算符。
end
15.If语句的使用:
if num > 40 then
print('over 40')
elseif s ~= 'walternate' then -- ~= 表示不等于, -- 像Python一样,== 表示等于,适用于字符串。
io.write('not over 40\n') -- 默认输出到stdout。
else -- 默认变量都是全局的。
thisIsGlobal = 5 -- 通常用驼峰式定义变量名。(即第一个单词小写,后面的单词首字母大写)
16.lua中所有的变量默认都是全局的,如何定义局部变量呢,用local关键字修饰:
local line = io.read() -- 读取stdin的下一行
17.字符串的连接用两个点 ..
print('Winter is coming, ' .. line)
end
18.未定义的变量返回nil
foo = anUnknownVariable -- 现在 foo = nil. -- 这不会出错
19.lua中的逻辑真,逻辑假
--只有nil和false是逻辑假,而其他所有都是逻辑真
if not aBoolValue then print('twas false')
end
20.lua中的短路操作符:or 和and
Lua提供的逻辑操作符有and、or和not。与条件控制语句一样,所有的逻辑操作符将false和nil视为假,而将其它的任何东西视为真。
对于操作符and来说,如果它的第一个操作数为假,就返回第一个操作数;不然就返回第二个操作数。
对于操作符or来说,如果它的第一个操作数为真,就返回第一个操作数;不然就返回第二个操作数。
这里和C++等语言是存在区别的,Lua的逻辑操作符并不是简单的返回true或false,而是返回操作数的值。例如以下代码:
print(4 and 5) -->5
print(nil and 13) -->nil
print(false and 13) -->false
print(4 or 5) -->4
print(false or 5) -->5
21.for循环中的范围包括两端:
karlSum = 0
for i = 1, 100 do -- 范围包括两端 ,即i=[1,100],且表示i是递增的
karlSum = karlSum + i
end
22.for循环中表示递减的范围:
fredSum = 0
for j = 100, 1, -1 do fredSum = fredSum + j
end --其中-1表示递减 -- 通常,范围表达式为begin, end [, step]. --[]表示step是可选的参数
23.另一种循环的方式:使用repeat关键字修饰:
repeat
print('the way of the future')
num = num - 1
until num == 0
24.lua中的函数:
function fib(n)
if n < 2 then return 1
end
return fib(n - 2) + fib(n - 1)
end
25.支持闭包及匿名函数,有点相当于函数的嵌套调用:
function adder(x) -- 调用adder时,会创建用于返回的函数,并且能记住变量x的值:
return function (y) return x + y
end
end
a1 = adder(9)
a2 = adder(36)
print(a1(16)) --> 25
print(a2(64)) --> 100
26.函数的返回值个数:
-- 返回值、函数调用和赋值都可以使用长度不匹配的list。
-- 不匹配的接收方会被赋为nil;
-- 不匹配的发送方会被忽略。
x, y, z = 1, 2, 3, 4 -- 现在x = 1, y = 2, z = 3, 而 4 会被丢弃。
function bar(a, b, c)
print(a, b, c)
return 4, 8, 15, 16, 23, 42
end
x, y = bar('zaphod') --> prints "zaphod nil nil"
-- 现在 x = 4, y = 8, 而值15..42被丢弃。
27.函数是一等公民,可以是全局的也可以是局部的:
-- 下面是等价的:
function f(x) return x * x end
f = function (x) return x * x end
-- 这些也是等价的: local function g(x) return math.sin(x) end local g; g = function (x) return math.sin(x) end -- 'local g'可以支持g自引用。
-- 顺便提一下,三角函数是以弧度为单位的。
28.用一个字符串参数调用函数,不需要括号:
print 'hello' --可以工作,也可以写成 print('hello') --即用字符串做函数参数时,可以省略括号
29.lua中唯一的数据结构:table
--在lua中,table就是数组和集合的混合物(这也是为什么table如此强大的原因)。
--具体的用法可以参考我的文章,lua中table的用法,因为lua实在是太多内容了
30.元表(metatable) 和元方法(metamethod)。
-- table的元表提供了一种机制,可以重定义table的一些操作。
-- 之后我们会看到元表是如何支持类似js的prototype行为。
f1 = {a = 1, b = 2} -- 定义了两个table
f2 = {a = 2, b = 3}
-- 这个是错误的: -- s = f1 + f2 ,两个table不能直接相加
--元表对应的英文是metatable,元方法是metamethod。我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算。
--在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了。
lua编程基础的更多相关文章
- Learning Lua Programming (2) Lua编程基础
开始学习Lua编程,首先从一些简单的语法开始. 一.编辑环境 下面推荐一个Lua编程的IDE,感觉是很强大的.ZeroBrane Studio,windows平台,mac平台都有.点击打开链接 官方 ...
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xL ...
- 腾讯开源手游热更新方案,Unity3D下的Lua编程
原文:http://www.sohu.com/a/123334175_355140 作者|车雄生 编辑|木环 腾讯最近在开源方面的动作不断:先是微信跨平台基础组件Mars宣布开源,腾讯手游又于近期开源 ...
- 接触手机脚本编程------基于触动精灵的lua编程
Auto.js好用多了,还不用root直接能用,我为什么学这个呢..... 最近因为学习需要开始接触一门新的脚本语言,我更深刻的发现了,语言只是一种工具,重要的是解决问题的思维,由于这次是需要我快速掌 ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- T-Sql编程基础
T-sql编程 入门小游戏 T-sql编程基础,包括声明变量,if判断,while循环,以及使用一些基本函数. 记得在学校的时候,写过一个二人对打的文字输出游戏. 上代码 alter proc usp ...
随机推荐
- 一、Linux目录结构
转自:http://www.cnblogs.com/JCSU/articles/2770249.html 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/bin,或/usr/sbi ...
- Android IOS WebRTC 音视频开发总结(五一)-- 降噪基本原理
文章主要介绍噪声消除,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,欢迎关注微信公众号blacker,更多详见www.rtc.help ---------------------- ...
- POJ C++程序设计 编程题#3 编程作业—多态与虚函数
编程题 #3 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面的程序输出 ...
- SMTP Failed on Process Scheduler
If you are seeing messages like this in your message log when running a process through the process ...
- http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站
wordpress是世界上使用最多的php开源博客系统,功能强大,而且拥有众多的插件,可扩展性强. 最近,我也用它做了一个企业网站,欢迎浏览:http://www.shanghaihaocong.co ...
- “requireJs前传”之为什么要用前端模块化?
对于没有接触过后台的前端同学想要理解模块化是很困难的,鉴于未来的趋势,以下是我转载的一篇文章,希望对大家有用! 特此声明:转载文章,不喜勿喷.和谐前端,世界和平!0.0 模块的写法 随着网站逐渐变成” ...
- ThinkPHP之中的getField、Find、select、返回数据类型详解(ThinkPHP之中所有数据读取了)
小李子:用于演示作用的数据库表:customers 官方解读: “ 读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法 ” $customers=D('customers' ...
- jQuery ajax Load关闭缓存的方法
[导读] 在jQuery ajax Load关闭缓存的方法很简单,我们只要在$ ajaxSetup中把cache: false就楞以了,当然我们还可以使用一个随机参数来实例了.简单介绍load(url ...
- windows下编译lua源码
所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的.而且lua越做越精简了,5.1的版本里面还有一些te ...
- 百度 UEditor 简单安装调试和调用,网上其它的教程太官方了,不适合新手
对于新手来说,只要能实现功能即可,其它设置完全默认. 预览图: 1.首先 到官网下载,这个不多说.下载后解压到网站你想要的目录,我这里放到根目录下在你需要使用编辑器的地方,插入如下HTML代码: &l ...