035_lua快速入门
执行下面的脚本用luajit test.lua即可
一、变量及逻辑运算
--number, string, boolean, table, function, thread, userdata, nil --<1>Number demo
x = 11 --It's number type,but not an integer
--The two common variable name below in the lua language is recommended.
exampleVar = 10e5 --equal 1000000
example_var = 666
exampleHexadecimal = 0xFAE --equal 4014 --<2>String demo
exampleStrings = "Hello 123 &^*& \n" --nil
print(notDefineVariableIsNil) -- nil -- MathOperator demo
-- (),a ^b, not a, #a, -a, a*b, a/b, a%b, a+b, a-b, a..b, a<b, a>b(return boolean value), a ~= b(tilde equals !), a == b
-- a and b, a or b
exampleMathModuloOperator = 10/3 --Supporting + - * / %, and so forth.
exampleDecimalRemainder = 10 % 3.3 -- equal 0.1
exponentNum1 = 2
exponentPower = 4
exampleExponentCal = exponentNum1 ^ exponentPower -- 16
exampleBoolean = true
print(not exampleBoolean) -- false
print(-exponentNum1) -- -2
print( (exponentNum1 + exponentPower) * 4) -- 24 --逻辑运算符
exponentNum1 = 10
exponentPower = 4 print(exponentNum1 and exponentPower) -- 4,因为第一个参数为true,所以返回4
print(exponentNum1 or exponentPower) --10,因为第一个参数为true exponentNum1 = false
print(exponentNum1 and exponentPower) --false,因为第一个参数为false,所以返回false a = 4
b = 10 print( a < b or "this statement is false") --true,or的话第一个参数为true直接返回
print( a > b or "this statement is false") --this statement is false,or的话第一个参数为false返回第二个参数
print( not(a + 11 < b) or "this statement is false") --true,or的话第一个参数为true直接返回 -- Catenation string
exampleCatenationString = "Hello " .. "World!" -- Hello World!
print(#exampleCatenationString) -- 12 --print(exampleCatenationString)
二、条件语句
--条件运算
if 3 > 5 then
print("this statement is true")
elseif 20 > 15 then
print("20 > 15")
else
print("this statement is false")
end --常用函数
print(type(20)) --number,类型为number类型 testVar = nil
if type(testVar) == "number" then
print("testVar is a number")
elseif type(testVar) == "string" then
print("testVar is a string")
else
print(testVar)
print("testVar is a else")
end
三、循环
print("------while loop example------")
iter = 0
while iter <= 10 do
print(iter)
iter = iter + 1
end print("------for loop example------")
--等同于while循环,默认递增为1,所以不用写
for i = 0, 10 do
print(i)
end print("-----改变递增系数-----")
--以3为递增
for i = 0, 10, 3 do
print(i)
end print("-----增加退出循环条件-----")
for i = 0, 10 do
print(i)
if i == 5 then break end --假如比较简单,可以直接一行
end print("------until loop example------")
element = 0
repeat
print(element)
element = element + 1
until element > 10
四、基本表
t = {1, "hello", true, four = 4, five = true, six = "world"} --可以放置任何类型
print(t[2]) --hello
print(t[4]) --nil,直接打印第4个元素为nil
--以键值对的方式访问
print(t["four"]) --4
print(t.four) --4
print(t.five, t["six"]) --true world --sizeof表
print(#t) --3,nil的不算在内 examT = {1, 2, 3, 4, 5, 6}
print(#examT) --6 examString = "know"
print(#examString) --4
五、函数
(1)命名函数的两种方式.
function f()
print("Hello")
end g = function()
print("Hello again")
end f() --推荐这种用法
g() function println(value)
print(value)
end
println("Arun")
println(10) y = 911 --全局变量
function addPrint(a, b)
x = "101010101010"
print(x)
y = 912
return a + b
end t = {addPrint(1, 2), 23}
println(t[1])
print(x)
print(y)
(2)变量的作用域
--x = 12 --打开这个变量,可以看出x变量的值的范围
function add(a, b)
x = 10 --本地变量
local y = 11
print(x) --10
return a + b
end print(x) --nil print(add(5,15)) --20
print(x) --10,函数内部加local关键字,它会变成全局变量
print(y) --nil
六、内存管理
注意内存的传值引用和传址引用
------------------
x = 10
y = x
x =20
print(x)
print(y) --[[输出=>
20
10]]
------------------
m = {10, 20, 30}
n = m
m[2] = 40 print(m[2])
print(n[2])
--[[输出=>
40
40]]
七、闭包
function f()
local x = 1
return function() print(x); end
end printHello = f()
printHello() --1
-------------------------------
function createIter()
local i = 0
return function() print(i); i = i + 1 end
end iter = createIter()
iter() --0
iter() --1
iter() --1
八、table面向对象实现
Player = {
x = 0, y = 0,
name = "",
new = function()
p = {}
for k, v in pairs(Player) do
p[k] = v
end
return p
end, move = function(obj, x,y)
obj.x = obj.x +x
obj.y = obj.y +y
end
} p1 = Player.new() p1.x = 10
p1.y = 20
p1.name = "Bob" p2 = Player.new()
p2.x = 30
p2.y = 50
p2.name = "Steve" print(p1.x, p1.y, p1.name) --10 20 Bob
print(p2.x, p2.y, p2.name) --30 50 Steve p1.move(p1, 10, 10)
p2.move(p2,70,90)
print(p1.x, p1.y) --20 30
print( p2.x, p2.y) --100 140
九、meta表高级用法,重写原始操作符
Vector2 = {
x = 0, y =0,
mt = {},
New = function()
local vec = {} setmetatable(vec, Vector2.mt) vec.x = Vector2.x
vec.y = Vector2.y
vec.mt = Vector2.mt
vec.Translate = Vector2.Translate
return vec
end,
Translate = function(self, dx, dy)
self.x = self.x + dx
self.y = self.y + dy
end
}
Vector2.mt.__add = function(v1, v2)
local vec = Vector2.New()
vec.x = v1.x + v2.x
vec.y = v1.y + v2.y
return vec
end Vector2.mt.__sub = function(v1, v2)
local vec = Vector2.New() vec.x = v1.x - v2.x
vec.y = v1.y - v2.y return vec
end -- __mul, __div, __mod,
Vector2.mt.__eq = function(v1, v2)
return v1.x == v2.x and v1.y == v2.y
end
-- __lt, __le, __gt, __ge Vector2.mt.__tostring = function(vec)
return "(" .. vec.x .. ", " .. vec.y .. ")"
end Vector2.mt.__metatable = "Private" --[[Vector2.mt.__index = Vector2 Vector2.mt.__newindex = function(t, k, v)
error("Cannot change values of Vector2 instance.")
end]] v1 = Vector2.New()
v1.x = 10
v1.y = 20
--v1.Translate(v1, 10, 10)
--等同于
--v1:Translate(10, 10)
--print(v1.x, v1.y) --20 30 v2 = Vector2.New()
v2.x = 30
v2.y = 40 v3 = v1 + v2
print(v3.x, v3.y) --40 60 v4 = v1 - v2
print(v4.x, v4.y) -- -20 -20 print(v4) -- (-20, -20)
print(getmetatable(v4)) -- Private
print(v1 == v2) -- false --setmetatable(v4, nil) --test.lua:71: cannot change a protected metatable
十、高级循环
t1 = {1, 2, 3}
t1[2] = nil
for i=1, #t1 do
print(i, t1[i])
end
--[[1 1
2 2
3 3]] t2 = {one = 1, two = 2, three = 3} for k,v in pairs(t2) do --是pairs而不是ipairs
print(k, t2[k])
end
--[[
one 1
three 3
two 2]] t3 = {1, 2, 3, 4, 5}
function numIter(tb, start)
i = start
return function()
i = i + 1
if tb[i - 1] then
return i - 1, tb[i - 1]
else
return nil
end
end end for k,v in numIter(t3, 1) do
print(k, v)
end
--[[
1 1
2 2
3 3
4 4
5 5]]
十一、lua内运行外部代码的三种方式
(1)test1.lua
for i = 0, 10 do
print("hello")
end
return 100
(2)main.lua
-- dofile, loadfile load
--<1>加载执行文件第一种方式
--dofile("/Users/00arunalldata00/006_eleallproject/002ngconf/002_camel-agent-deploy/router-lua-module/aruntest/lua_learning/test1.lua") --<2>加载执行文件第二种方式
--[[function newDoFile(filename)
f = assert(loadfile(filename))
return f()
end newDoFile("./test1.lua")
print(newDoFile("./test1.lua")) -- 100]] --<3>加载执行文件第三种方式
--(1)load和函数调用第一种区别
f = load("print(20)")
f() -- 20 function g()
print(20)
end
g() -- 20
--(2)load和函数调用第二种区别
x = 10
local x = 20
function f1()
x = x + 1
print(x)
end
f1() -- 21 g1 = load("x = x + 1;print(x)")
g1() -- 11
十二、
Reference:
https://www.youtube.com/playlist?list=PL0o3fqwR2CsWg_ockSMN6FActmMOJ70t_
035_lua快速入门的更多相关文章
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- 解决pycharm启动慢
xms -xmx相关参数设置 打开pycharm的安装目录 D:\PyCharm\PyCharm 2018.2.3\bin下文件pycharm.exe.vmoptions修改默认(版本2016.2)的 ...
- Doker安装日志,留个记录而已
tianye@ubuntu:/usr/share$ wget -qO- https://get.docker.com/ | sh # Executing docker install script, ...
- js中检测数据类型的几种方式
1.typeof 一元运算符,用来检测数据类型.只可以检测number,string,boolean,object,function,undefined. 对于基本数据类型是没有问题的,但是遇到引用数 ...
- python模块之os sys shutil
os模块 os模块是与操作系统交互的一个接口 #当前执行这个python文件的工作目录相关的工作路径 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir( ...
- 函数的作用域、global与nonlocal
global 表示不再使用局部局部作用域中的内容,而是改用全局作用域中的变量 a = 100 def func(): global a # 表示不再局部创建这个变量,而是直接使用这个全局的a a = ...
- Hadoop 博文整理
参考文章##搭建 使用yum安装CDH Hadoop集群 http://blog.javachen.com/2013/04/06/install-cloudera-cdh-by-yum/ Ha ...
- 酷狗.kgtemp文件加密算法逆向
该帖转载于孤心浪子--http://www.cnblogs.com/KMBlog/p/6877752.html 酷狗音乐上的一些歌曲是不能免费下载的,然而用户仍然可以离线试听,这说明有缓存文件,并且极 ...
- JS处理数据四舍五入
一,使用Math.toFixed toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 语法NumberObject.toFixed(num) 但是网友说toFixed bug比 ...
- [译]在vuejs中使用任意js库
原文 全局变量 最naive的办法是通过附加类库到window对象,使之成为全局变量: entry.js window._ = require('lodash'); MyComponent.vue e ...
- 【游戏开发&Unity】捏脸系统(附源码)
本着“没有捏脸系统算什么RPG”的想法,着手做一个2d简易捏脸demo.其实换装游戏都差不多啦~ github代码地址:Simple-Character-Edit-System (Unity版本:5. ...