Hytale之我见 专注hytale服务器技术

lua用例列表

2019-11-07
hytaleme
lua

本文提供了一些lua的用例,以更好地理解lua语言。

字符串用例

可以用单引号,双引号,反斜杠\转义:

str = 'abcdef'
str = "abcdef"
str = "abc\ndef"
str = "a\98cdef" -- abcdef

可以用[[]]来界定任意字符的字符串:

str = [[hello
world!
]]

但如果字符串里包含[[]]时会出问题,因此可以用中间加等号的形式(等号数量是任意的):

str = [==[ [[helloworld]] ]==] -- [[helloworld]]

#用来求字符串长度:

print(#"abc") --3

self用例

lua里的self就相当于java等面向对象编程语言(OOP)里的this,一般会配合:函数调用方式使用,:是lua面向对象的语法糖。

以下两个等价:

function Animal:say()
    print(self.name..' say~')
end
function Animal.say(self)
    print(self.name..' say~')
end

模块用例

模块的作用就是可以将代码写在多个不同的文件里,然后进行引用。

导出模块

文件末尾使用return导出

--- utils.lua

local module = {}

module.param = 'value'
module.method = function() end

return module
--- Model.lua

local Model = {}

function Model:new(name)
    local newObj = {
        name = name,
    }
    self.__index = self
    return setmetatable(newObj, self)
end

function Model:toString()
    return self.name
end

return Model

引用模块

使用require进行引用

require 'utils'
local Model = require 'Model'

面向对象用例

主要通过tablemetatable实现面向对象,以下将主要从面向对象的三大特征(封装,继承,多态)来举例。

封装

就是把属性,方法封装到一起

--这里封装了属性name与方法say

--定义动物
Animal = {}

--动物的实例化方法
function Animal:new(name)
    local newObj = {
        name = name,
    }
    self.__index = self
    return setmetatable(newObj, self)
end

--动物的say方法
function Animal:say()
    print(self.name..' say~')
end

--新建动物实例
local animal = Animal:new('animal')
--调用方法
animal:say() -- animal say~

继承

继承就是子类继承父类,父类的属性与方法也会继承过来,同名属性与方法则覆盖。

--这里继承了动物对象

--定义动物的子类:鸭子
Duck = Animal:new()

--鸭子的实例化方法
function Duck:new(name)
    -- 调用父类方法
    local newObj = Animal:new(name)
    -- 本身额外属性
    newObj.legs = 2
    
    self.__index = self
    return setmetatable(newObj, self)
end

多态

多态在lua里的体现就是子类可以覆盖父类的方法。

--这里覆盖了动物对象的say方法

--鸭子的say方法,覆盖父类动物的say方法
function Duck:say()
    print(self.name..' say: I have '..self.legs..' legs~')
end

--新建鸭子实例
local duck = Duck:new('aDuck')
--调用方法
duck:say() -- aDuck say: I have 2 legs~

调用父类方法

父类的属性是调用不了的,但是父类的方法可以在子类里调用。

--鸭子的say方法,调用父类动物的say方法
--注意调用方式:要用点号而不能用冒号,而且第一个参数要把self传进去
function Duck:say()
    Animal.say(self) -- duck say~
end

相似文章

上一篇 lua学习教程

目录