原创大约 4 分钟
原创大约 8 分钟
Lua中其实没有类和对象的概念,但它用table
+ function
模拟出了某些面向对象的特性。
-- 元类
Person = {name = "lixingyun", age = 19, gender = "male"}
-- 定义类的结构
function Person:new(person, name, age, gender)
person = person or {}
setmetatable(person, self)
self.__index = self
self.name = name or "lixingyun"
self.age = age or 0
self.gender = gender or "male"
return person
end
-- 定义类的方法
function Person:getName()
print("该用户为:", self.name)
end
-- 创建对象
p = Person:new (person, "wanglin", 20, "male")
-- 访问对象的属性
print(p.name)
print(p.age)
print(p.gender)
-- 调用对象的方法
p:getName()
-- User继承了Person
User = Person:new()
function User:new (user, address)
user = user or Person:new(user, address)
setmetatable(user, self)
self.__index = self
self.address = address or "娆疆"
return user
end
-- 派生类方法getArea
function User:getArea ()
print("该用户目前在:", self.address)
end
-- 创建对象
u = User:new(user, "大唐")
u:getArea()
原创大约 1 分钟
IO
官方文档中的IO处理分为隐式文件处理(Implicit File Handles)
和显式文件处理(Explicit File Handles)
两种模式。
-
隐式文件处理(Implicit File Handles
):需要设置默认输入
和默认输出
,后续的读写操作由默认
文件完成。 -
显式文件处理(Explicit File Handles
):需要返回一个句柄
,后续的操作都通过这个返回的句柄
完成。
原创大约 3 分钟
string
-- 2个方括号[[]]的作用类似于Python或Groovy中三引号字符串的作用
-- 声明变量不需要任何类型,直接赋值就行
html = [[
<html>
<head>test.lua</head>
<body>
this is a test.lua file
</body>
</html>
]]
print(html)
-- 当字符串和数字执行算术操作时,Lua会尝试将字符串转成一个数字,不过这个字符串要是一个数字字符串才行,如果是字母的会报错
print("1" + 1)
print("1" - 1)
print("1" * 2)
print("1" / 2)
-- 下面的语句会报错
-- print("a" / 2)
-- # 用来计算字符串的长度,只要放在字符串前面就行了
print(#"hello lua")
-- 如果字符串中包含中文,#就不能用了
print("【你好,lua】的字符个数是:" .. #"你好,lua!")
print("【你好,lua】的字符个数是:" .. string.len("你好,lua!"))
-- print("【你好,lua】的字符个数是:" .. utf8.len("你好,lua!"))
-- Lua提供了很多方法来支持字符串的操作,常用的如下
print(string.upper("lua"))
print(string.lower("lua"))
print(string.reverse("lua"))
-- 找到则返回起始索引与结束索引
print(string.find("hello lua", "lua"))
print(string.format("hello %s", "lua"))
-- 下标从1开始
print(string.sub("lua is a script language", 8, -1))
-- ASCII码转换为字符
print(string.char(65))
print(string.rep("lua", 3))
原创大约 7 分钟
数据类型
虽然官方强调Lua是一种动态类型的语言,它没有类型定义,所有的值都有自己的类型。但Lua的值依然没有脱离八种基本类型的范围。
数据类型 | 描述 |
---|---|
nil | 表示一个缺失的值(相等于null),因为nil和false都可以使条件为假,所以它们统称为假值 |
boolean | 只有true和false两个值 |
number | 既表示64位整数,又表示64位浮点数 |
string | 是一个不可变的8位字节序列 |
function | C 或Lua 编写的函数 |
userdata | 任意一个存储在变量中的C 数据结构。它有两种类型:完整用户数据(full userdata ,是一块内存对象)和轻量用户数据 (light userdata ,表示C 指针的值) |
thread | 表示独立的执行线程,用于实现协程 |
table | 表示关联数组,以除了nil 和NaN 之外的任何Lua 值作为索引,可用于表示普通数组、列表、符号表、集合、记录、图形、树等 |
原创大约 3 分钟