--
-- Created by IntelliJ IDEA.
-- User: koko
-- Date: 15/5/21
-- Time: 下午8:48
-- To change this template use File | Settings | File Templates.
--
-- lua的基本数据类型
-- lua的优势,1 可扩展性,可以很很多语言集成 2 简单,类似js
-- 3 高效率(这个时我们采用他的主要原因) 4 与平台无关
-- lua的几种使用方式
--循环遍历 1 嵌入到应用程序中(我们也是应用在这个方面,和nginx结合,加速页面渲染)
-- 2作为一种独立的语言
-- 3作为库供第三方调用
-- lua 官方网站 lua官网 http://www.lua.org
-- 本章介绍
-- lua注释
-- 单行注释
-- [[ ]] 多行注释
-- 最简单的lua demo
-- print("a") -- 保存为hello.lua
-- 运行lua hello.lua即可
-- 全局变量和局部变量
--[[ local partVarible=1;
globalVarible =1;]]
-- loadfile 可以将代码加载 ,优点类似jsp里的include
-- lua的几种基本数据类型 Nil,Boolean,Number,String,Function, Userdata and Threads
-- 算数运算符 < > <= >= == ~=(和!=意思一样)
-- 逻辑运算符 and or not
-- 字符串链接运算符 ..
-- 优先级
--[[
^
not - (unary)
*/
+-
..
< > <= >= ~= == and
or
]]
-- 表的构造
--[[days = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}]]
-- 赋值语句
--[[a = "hello" .. "world"
t.n = t.n + 1
a, b = 10, 20]]
-- 他里面的交换算法非常简单
--[[x, y = y, x -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]
]]
-- 控制语句
--[[if conditions then
then-part
end;]]
--[[while condition do
statements;
end;]]
--[[repeat
statements;
until conditions;]]
--[[for var=exp1,exp2,exp3 do
loop-part
end]]
--for i,v in ipairs(a) do print(v) end
--for k in pairs(t) do print(k) end
--[[
local a = {5,8,9,10};
for key,value in pairs(a)
do print(key,value);
end]]
-- 函数多返回值
-- local a ,b = fun();
-- 闭包 ,grades 成为upvalue
--[[
names = {"Peter", "Paul", "Mary"}
grades = {Mary = 10, Paul = 7, Peter = 8}
table.sort(names, function (n1, n2)
return grades[n1] > grades[n2] -- compare the grades
end
)
for key,value in pairs(names)
do print(key,value);
end
]]
--查看是否支持动态链接库
--print(loadlib());
--[[if pcall(openfile)
then
print("ok")
end]]
--[[
local status, err = pcall(
function ()
error({code=121},2)
end);
print(err.code)]]
--[[
co = coroutine.create(function ()
for i=1,10 do
print("co", i)
coroutine.yield()
end
end)
coroutine.resume(co) --> co 1
print(coroutine.status(co))]]
--[[
local authors = {} -- a set to collect authors
function Entry (b)
authors[b.author] = true
end
dofile("entry.lua")
for name in pairs(authors)
do print(name)
end
]]
-- 定义metatable
--[[t={}
t1 = {}
setmetatable(t, t1)
assert(getmetatable(t) == t1)]]
-- metatable和metamethods 实例
--[[Set = {}
function Set.new (t)
local set = {}
setmetatable(set, Set.mt)
for _, l in ipairs(t) do set[l] = true end
return set
end
function Set.union (a,b)
local res = Set.new{}
for k in pairs(a) do res[k] = true end
for k in pairs(b) do res[k] = true end
return res
end
function Set.intersection (a,b)
local res = Set.new{}
for k in pairs(a) do
res[k] = b[k]
end
return res
end
function Set.tostring (set)
local s = "{"
local sep = ""
for e in pairs(set) do
s = s .. sep .. e
sep = ", " end
return s .. "}"
end
function Set.print (s)
print(Set.tostring(s))
end
Set.mt = {} -- metatable for sets
s1 = Set.new({10, 20, 30, 50})
s2 = Set.new{30, 1}
print(getmetatable(s1)) --> table: 00672B60
print(getmetatable(s2))
Set.mt.__add = Set.union
s3 = s1 + s2
Set.print(s3) --> {1, 10, 20, 30, 50}
Set.mt.__mul = Set.intersection
Set.print((s1 + s2)*s1) --> {10, 20, 30, 50}]]
-- __add ,__mul,__eq,__lt,__le __tostring(print打印的时候调用)这些metamethods都可以被重写
-- The __index Metamethod 特殊的metamethod
--[[-- create a namespace
Window = {}
-- create the prototype with default values
Window.prototype = {x=0, y=0, width=100, height=100 }
-- create a metatable
Window.mt = {}
-- declare the constructor function
function Window.new (o)
setmetatable(o, Window.mt)
return o
end
Window.mt.__index = function (table, key)
return Window.prototype[key]
end
w = Window.new{x=10, y=20}
w2 = Window.new{x=1111, y=2222 }
print(w.x) --> 10
print(w2.x) --> 10
print(Window.prototype.x)
--Window.mt.__index 没有必要是非得是函数,可以是一个表
-- 可以用如下形式
Window.mt.__index =Window.prototype;]]
--当我们想不通过调用__index metamethod 来访问一个表,我们可以使用 rawget 函数。 Rawget(t,i)的调用以 raw access 方式访问表。
--这样查找的时候不会访问_index
-- The __newindex Metamethod 用来对表进行访问
--[[
t = {} -- original table (created somewhere)
-- keep a private access to original table
local _t = t
-- create proxy
t = {}
-- create metatable
local mt = {
__index = function (t,k)
print("*access to element " .. tostring(k))
return _t[k] -- access the original table
end,
__newindex = function (t,k,v)
print("*update of element " .. tostring(k) ..
" to " .. tostring(v))
_t[k] = v -- update original table
end
}
setmetatable(t, mt)
t[2] = 'hello'
print(t[2])]]
-- 打印全局变量
--[[for n in pairs(_G)
do print(n)
end]]
-- loadstring 5.3版以后已抛弃
--a = "123";
--loadstring("value =" .. a);
-- 使用动态名字访问全局变量
-- string 库的 gfind 函数来迭代 f 中的所有单词(单词指一个或多个子母下划 线的序列)
--[[
function getfield (f)
local v = _G
for w in string.gfind(f, "[%w_]+") do
v = v[w]
end
return v
end
function setfield (f, v)
local t = _G -- start with the table of globals
for w, d in string.gfind(f, "([%w_]+)(.?)") do
if d == "." then -- not last field?
t[w] = t[w] or {}
t = t[w]
else
t[w] = v
-- create table if absent
-- get the table
-- last field
-- do the assignment
end end
end
setfield("t.x.y", 10)
print(t.x.y) --> 10
print(getfield("t.x.y")) --> 10]]
-- 非全局环境
--[[a = 1 -- create a global variable
-- change current environment to a new empty table
setfenv(1, {})
print(a) -- stdin:5: attempt to call global `print' (a nil value)]]
--[[
a = 1 -- create a global variable -- change current environment
setfenv(1, {_G = _G})
_G.print(a) --> nil
_G.print(_G.a) --> 1]]
-- (你必须在单独的 chunk 内运行这段代码,如果你在交互模式逐行运行他,
-- 每一行 都是一个不同的函数,调用 setfenv 只会影响他自己的那一行。)
-- 一旦你改变了你的环境, 所有全局访问都使用这个新的表,如果她为空,你就丢失所有你的全局变量,
-- 甚至_G, 所以,你应该首先使用一些有用的值封装(populate)她,比如老的环境:
--[[a=1
local newgt = {} -- create new environment
setmetatable(newgt, {__index = _G})
setfenv(1, newgt) -- set it
print(a) --> 1]]
-- 当你访问"global" _G,他的值为旧的环境,其中你可以使用 print 函数。 你也可以使用继承封装(populate)你的新的环境:
--[[
a=1
local newgt = {} -- create new environment
setmetatable(newgt, {__index = _G}) setfenv(1, newgt) -- set it
print(a) --> 1
a = 10
print(a) --> 10
print(_G.a) --> 1
_G.a = 20
print(_G.a) --> 20
]]
相关推荐
Lua 语法基础知识点总结 Lua 语言是一种轻量级、灵活的脚本语言,语法简单易学,但功能强大。下面是 Lua 语法的基础知识点总结: 注释 * 单行注释:使用 "--" 符号,注释从该符号到行末。 * 多行注释:使用 "--...
### Lua语法说明 #### 一、引言 Lua是一门高效、轻量级的脚本语言,自2009年起其使用率显著上升。它不仅适用于游戏开发领域,也被广泛应用于Web应用、自动化脚本等多个场景。本文将对Lua的基础语法进行详细解读,...
总结来说,Lua中的unpack函数是一个简单但功能强大的工具,它允许程序员从数组类型的table中提取元素,并且可以根据需要从任意位置开始解包。在处理大量数据或者需要从数组中提取多个值的场景中,unpack函数可以显著...
总结,Lua脚本语法简洁而强大,适合初学者快速上手。通过实例和练习,你可以更好地理解和掌握这些概念,并利用Lua解决实际问题。在Lua_Study这个压缩包中,你应该能找到更多有关Lua的学习资源,包括示例代码和习题,...
二、Lua语法特点 1. 易读性:Lua的语法简洁明了,没有复杂的语法规则,使得代码可读性强。 2. 动态性:Lua的所有数据类型都是动态的,这使得编程更加灵活。 3. 轻量级:Lua的运行库小,启动速度快,适合嵌入到...
在 Lua 5.2 中,`GOTO` 语句的基本语法如下: ```lua goto label; -- 语句 ::label:: -- 语句; ``` 这里 `label` 是一个标识符,用于标记目标位置。`goto` 后面紧跟的是目标位置的标签名称。 #### 三、使用说明 ...
它使得开发过程更为敏捷,因为 Lua 语法简洁,学习曲线平缓,同时也提供了与 C++ 代码的深度集成。 2. **Linux环境**: 在 Linux 上运行 LuaQt 需要确保已安装了 Lua 解释器、Qt 库以及 LuaQt 库本身。通常,你...
总结来说,“lua-pb解析”是指使用Lua语言和特定的lua-pb库解析protobuf格式的数据,它涉及protobuf的编译、Lua的脚本操作以及数据的序列化和反序列化过程。lua-pb项目提供了一个纯Lua环境下的解决方案,使得在不...
总结来说,通过LUA在STM32平台上实现LED闪烁,我们可以利用其简洁的语法和强大的控制能力,同时得益于JW4等固件框架的支持,实现高效的嵌入式编程。这不仅简化了开发过程,还提高了代码的可读性和可维护性。
总结,Lua是一种功能强大且易于学习的脚本语言,尤其适合嵌入式开发和游戏编程。通过“lua for windows”,你可以在Windows环境下轻松地学习和使用Lua,开启你的编程之旅。在实践中不断探索,你会发现Lua的灵活性和...
对于想要学习Lua的开发者来说,不仅要掌握其基本语法,还需要深入了解如何将Lua与C/C++结合起来使用,以便更好地发挥这两种语言的优势。随着实践经验的积累,开发者将会发现Lua的更多潜力和应用场景。
总结,Lua飞机大战源码展示了Lua在游戏开发中的实际应用,通过理解源码,我们可以学习到如何用Lua进行游戏逻辑控制、对象管理、输入处理、图形和音频操作等。对于想要深入学习Lua或游戏开发的读者来说,这是一个很好...
上述内容是对Lua 5.3中文手册中涉及的知识点的总结和展开。实际使用Lua语言进行开发时,需要根据这些基础知识点进行编程实践,才能熟练掌握Lua的特性,发挥其在脚本编写、嵌入式系统开发等场景的优势。
- 语法:Lua语法简洁,易于阅读,如`print("Hello, World!")`用于输出字符串。 2. CSV文件处理: - CSV格式:这是一种常见的数据交换格式,每一行代表一个记录,每个记录由逗号分隔的字段组成。 - 读取CSV:在...
1. **简洁的语法**:Lua语法简单明了,易于学习,没有复杂的语法规则,使得代码可读性高。 2. **动态类型**:Lua是动态类型的,变量无需声明类型,其类型由赋值决定。 3. **垃圾回收**:内置自动垃圾回收机制,...
- Lua语言基础语法介绍。 - 数据类型和变量。 - 控制结构(如条件语句、循环)。 - **进阶篇**: - 函数和模块。 - 错误处理和调试技巧。 - 面向对象编程。 - **高级篇**: - 性能优化技巧。 - C/C++扩展...
总结,Lua与Android的交互是通过JNI和Lua引擎实现的,这为Android应用带来了更多的动态性和可扩展性。通过注册Java方法,Lua脚本可以直接调用Android的API,同时Android应用也能执行Lua脚本并获取其执行结果。合理...
LUA的核心特点是简洁和高效,它拥有简单的语法结构,支持动态类型、自动内存管理以及垃圾回收机制。LUA脚本支持库通常包含一系列的模块,这些模块提供了额外的函数和数据结构,例如网络通信、文件操作、日期时间...
Lua的核心语法简洁明了,易于学习。从第二版开始,Lua就已经具备了变量、数据类型(包括nil、boolean、number、string、table、function、userdata和thread)、控制结构(如if、while、for循环)以及函数等基本元素...
LUA的语法简洁明了,支持变量、函数、表(类似哈希或关联数组)等基本数据类型,并提供了面向对象编程的机制。 **LUA字节码** LUA的源代码在执行前会被编译成字节码,这是一种中间表示形式,介于源代码和机器码...