文章目录
零、相关文章
【Lua】 Lua学习笔记(一)
【Lua】 Lua学习笔记(二)
【Lua】 Lua学习笔记(三)
【Lua】 Lua学习笔记(四)
【Lua】 Lua学习笔记(五)
【Lua】 Lua学习笔记(六)
【Lua】 Lua学习笔记(七)
【Lua】 Lua学习笔记(八)
【Lua】 Lua学习笔记(九)
一、前言
哈喽大家好,我是 FEZ98 ,今天继续系统学习Lua。这个系列是我系统学习Lua语言的学习笔记,我会把遇到的一些比较值得记录与关注的知识写在里面,供自己以后进行回顾。
二、Lua 面向对象
面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。
(2.1)面向对象特征
封装
: 指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。继承
: 继承的方法允许在不改动源程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。有利于减少重复编码,提高软件开发效率。多态
: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用 实现派生类中的方法。抽象
: 抽象 (Abstraction) 是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。
(2.2)Lua 中的面向对象
对象由属性和方法组成。LUA中最基本的结构是table,所以需要用 table
来描述对象的属性
。
lua 中的 function
可以用来表示方法
。那么LUA中的类
可以通过 table + function
模拟出来。
至于继承
,可以通过 metetable
模拟出来(不推荐用,只模拟最基本的对象大部分实现够用了)。
Lua 中的表不仅在某种意义上是一种对象。像对象一样,表也有状态(成员变量);也有与对象的值独立的本性,特别是拥有两个不同值的对象(table)代表两个不同的对象;一个对象在不同的时候也可以有不同的值,但他始终是一个对象;与对象类似,表的生命周期与其由什么创建、在哪创建没有关系。对象有他们的成员函数,表也有:
Account = {
balance = 0}
function Account.withdraw(v)
Account.balance = Account.balance - v
end
这个定义创建了一个新的函数,并且保存在 Account 对象的 withdraw 域内,其调用如下:
Account。withdraw(100.00)
实例:
(2.2.1)创建对象
创建对象是为类的实例分配内存的过程。每个类都有属于自己的内存并共享公共数据。
r = Rectangle:new(nil,10,20)
(2.2.2)访问属性
可以使用点号 (.
) 来访问类的属性。
print(r.length)
(2.2.3)访问成员函数
可以使用冒号 :
来访问类的成员函数。
r:printArea()
内存在对象初始化时分配。
实例2:
(2.3)Lua 继承
继承是指一个对象直接使用另一对象的属性和方法。可用于扩展基础类的属性和方法。
以下演示了一个简单的继承实例:
-- Meta class
Shape = {
area = 0}
-- 基础类方法 new
function Shape:new (o,side)
o = o or {
}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
return o
end
-- 基础类方法 printArea
function Shape:printArea ()
print("面积为 ",self.area)
end
以下 Square 对象继承了 Shape 类:
Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
o = o or Shape:new(o,side)
setmetatable(o, self)
self.__index = self
return o
end
实例:
输出:
(2.4)函数重写
Lua 中可以重写基础类的函数,在派生类中定义自己的实现方式:
-- SuperCar类方法 new
function SuperCar:new(superCarObject,superCarSpeed,superCarHonk)
superCarObject = superCarObject or Car:new(superCarObject,superCarSpeed,superCarHonk)
setmetatable(superCarObject,self)
self.__index=self
return superCarObject
end
-- SuperCar类方法 showSpeed
function SuperCar:showSpeed()
print("超跑最高速度为:",self.speed)
end
-- SuperCar类方法 honk
function SuperCar:honk()
print("超跑鸣笛: ",self.carhonk)
end
print("-----------------------------------------------------------------------------------------------------------")
-- Truck类方法 new
function Truck:new (truckObject,truckSpeed,truckHonk)
truckObject = truckObject or Car:new(truckObject,truckSpeed,truckHonk)
setmetatable(truckObject,self)
self.__index=self
return truckObject
end
-- Truck类方法 showSpeed
function Truck:showSpeed()
print("卡车最高速度为: ",self.speed)
end
-- Truck类方法 honk
function Truck:honk()
print("卡车鸣笛: ",self.carhonk)
end
三、Lua 数据库访问
Lua 数据库的操作库是 LuaSQL
,其支持的数据库由:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。
LuaSQL 可以使用 LuaRocks 来安装可以根据需要安装需要的数据库驱动。
LuaRocks 安装方法:
$ wget http://luarocks.org/releases/luarocks-2.2.1.tar.gz
$ tar zxpf luarocks-2.2.1.tar.gz
$ cd luarocks-2.2.1
$ ./configure; sudo make bootstrap
$ sudo luarocks install luasocket
$ lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require "socket"
安装不同的数据库驱动:
luarocks install luasql-sqlite3
luarocks install luasql-postgres
luarocks install luasql-mysql
luarocks install luasql-sqlite
luarocks install luasql-odbc
也可以使用源码安装方式, Lua Github 源码
Lua 连接 MySQL 数据库:
require "luasql.mysql"
--创建环境对象
env = luasql.mysql()
--连接数据库
conn = env:connect("数据库名","用户名","密码","IP地址",端口)
--设置数据库的编码格式
conn:execute"SET NAMES UTF8"
--执行数据库操作
cur = conn:execute("select * from role")
row = cur:fetch({
},"a")
--文件对象的创建
file = io.open("role.txt","w+");
while row do
var = string.format("%d %s\n", row.id, row.name)
print(var)
file:write(var)
row = cur:fetch(row,"a")
end
file:close() --关闭文件对象
conn:close() --关闭数据库连接
env:close() --关闭数据库环境
四、完毕
好了,经过为期一个月断断续续的学习,简要地将 Lua 看了一遍,后续还需要更多上手实践才能提高自己对 Lua 的掌握程度,那么 Lua学习笔记 暂时写到这里了,后续如果在项目或者学习中遇到什么新的问题,我也会在 Lua专栏 里进行相应的补充,over!o.O。