执行下面的脚本用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快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. keytool导入导出多条目对比【原】

    步骤一:生成orange.keystore和banana.keystore keytool -genkey -alias orange -keyalg RSA -keysize 1024 -keypa ...

  2. JAVA方法调用中的解析与分派

    JAVA方法调用中的解析与分派 本文算是<深入理解JVM>的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别. 方法调用,其实就是要回答一个问题:JVM在执行一个方法 ...

  3. JavaSE回顾及巩固的自学之路(三)——————所有语言的都存在的基本运算

    在上一篇的博客中,我回顾到Java中的关键字,标识符等知识点,而今天这篇博文将回顾Java的,哦,不,不止Java,据本人了解,几乎在所有的语言中的基础阶段,都会存在这些运算,只是语法不一样而已. 今 ...

  4. Hibernate常用API以及使用说明

    1===>Hibernate常用的aip有Configuration,SessionFactory,Transaction,Session Configuration主要用于加载配置文件,使用 ...

  5. C++ 中容器

    容器为模板类 顺序容器 vector deque (双端队列) list  (双向链表) forward_list(单向链表) array (固定大小数组) string ( 与vector 相似)保 ...

  6. 利用ssh操控远程服务器

    这里的”远程”操控的方法实际上也不是真正的远程.,這此操作方法主要是在一个局域网内远程操控电脑 (在一个路由器下).可以把它做成在互联网中的远程操控, 不过技术难度上加了一个等级, 如果你想是想人在公 ...

  7. Linux top 命令详解

    Top  top 查看资源占用 top -p pid# 查看某个进程PID 的内存占用: PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT: ...

  8. file图片上传之前先预览

    链接:https://www.cnblogs.com/tandaxia/p/5125275.html 记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<inp ...

  9. 在eclipse中从cvs下载项目,再部署到tomcat常见错误!

    1.先调出cvs视图 如果cvs插件还未安装,下载一个: 安装cvs插件:将features和pluguns文件夹里面的内容分别复制到eclipse安装路径下面对应的features和pluguns文 ...

  10. NPOI2.2.0.0实例详解(九)—设置EXCEL单元格【时间格式】

    原文:http://blog.csdn.net/xxs77ch/article/details/50245391 using System; using System.Collections.Gene ...