【Lua】 Lua学习笔记(十)

零、相关文章

【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)面向对象特征

  1. 封装: 指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。
  2. 继承: 继承的方法允许在不改动源程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。有利于减少重复编码,提高软件开发效率。
  3. 多态: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用 实现派生类中的方法。
  4. 抽象: 抽象 (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"

Window下安装 LuaRocks

安装不同的数据库驱动:

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。

猜你喜欢

转载自blog.csdn.net/weixin_43057990/article/details/132475593
LUA