前言

网上配置 EmmyLua 的方法很多,此处就不做赘述(因此前提是你已经安装配置完EmmyLua)

本文仅是对 EmmyLua插件注解功能 用法的代码演示。因为网上大部分EmmyLua配置教程中都没对此部分进行讲解,而实际lua开发时EmmyLua的注解功能几乎必不可缺,故作此文

注解的目的

我们在编写C#脚本时,IDE的相关插件能提示各类方法或成员以及描述:

但Lua内,即便在安装完EmmyLua,不写注解的话,也就没有任何提示(灰色提示仅表示刚有写过该参数而已,完全不知道是成员变量或方法):

因此EmmyLua注解功能就是为了解决该问题:模拟实现OOP编程中代码提示

注解用法

类声明

基本格式:--@class MY_TYPE[:PARENT_TYPE] [@comment]

---@class Person 人
Person = {}; ---@class Gamer : Person 玩家
Gamer = {};

变量类型

基本格式:---@type MY_TYPE[|OTHER_TYPE] [@comment]

PS:按上述官方用法,comment描述应当放在末尾,但我这试了下type不大行,可以放在顶部

---@type number 我的ID
myId = 1; ---玩家的表
---@type table<number, Gamer>
gamersTable = {}; ---@type Person Person实例
personA;
---@type Gamer Gamer实例
gamerA;

变量的额外属性

即使该类未持有某属性,也可以通过添加注解,在提示内出现(PS:其实EmmyLua实现UnityAPI的提示也是基于此的)

基本格式:---@field [public|protected|private] field_name FIELD_TYPE[|OTHER_TYPE] [@comment]

---@class Person 人
---@field public Name string 名字
---@field private m_Age number 年龄
Person = {
Name = "",
};

函数

---取得台词
---@param isCN boolean 是否是中文
---@param id number 台词字典ID
---@return string 台词
function GetLines(isCN, id)
local str = ""; -- do something
return str;
end

备注

在IDEA下,对目标使用Alt+Enter快捷键(或点小灯泡),可较方便自动补全注解:

完整事例

现有Person基类,Gamer类继承自Person,在Main.lua内实现两个类的创建及使用(直接粘到本地跑就行):

Main.lua:

require("Person");
require("Gamer"); ---@type Person
local pa = Person:Create("joker", 18);
pa:ShowInfo();
pa:ReName("Joker");
pa:ShowInfo() ---@type Gamer
local ga = Gamer:Create("fox", 19, nil, nil);
ga:ShowInfo();
ga:ReName("Fox");
ga:ReGamerInfo("123", "456");
ga:ShowInfo();

Person.lua:

---@class Person 人类型
---@field public Name string 名字
---@field private m_Age number 年龄
Person = {
Name = "",
m_Age = 0,
}; Person.__index = Person; ---Create
---@param name string
---@param age number
function Person:Create(name, age)
---@type Person
local t = {}; setmetatable(t, Person); t:ReName(name);
t:ReAge(age); return t;
end ---ReName
---@param newName string
---@public
function Person:ReName(newName)
self.Name = newName;
end ---ReAge
---@param newAge number
---@private
function Person:ReAge(newAge)
self.m_Age = newAge;
end ---ShowInfo
---@public
function Person:ShowInfo()
print("Name = " .. self.Name .. ", Age = " .. self.m_Age);
end

Gamer.lua:

require("Person")

---@class Gamer : Person 玩家
---@field private SW string SW码
---@field private SteamId string Steam链接
Gamer = {
SW = "",
SteamId = "",
}; Gamer.__index = Gamer;
setmetatable(Gamer, Person); function Gamer:Create(name, age, sw, steamId)
---@type Gamer
local t = {};
t = Person:Create(name, age); setmetatable(t, Gamer); t:ReGamerInfo(sw, steamId); return t;
end ---ReGamerInfo
---@param sw string
---@param steamId string
---@public
function Gamer:ReGamerInfo(sw, steamId)
self.SW = sw or "0";
self.SteamId = steamId or "0";
end ---ShowInfo
---@public
function Gamer:ShowInfo()
print("Name = " .. self.Name .. ", Age = " .. self.m_Age .. ", SW = " .. self.SW .. ", SteamId = " .. self.SteamId);
end

PS:可以用 在Lua中实现面向对象特性——模拟类、继承、多态 - 马三小伙儿 大佬这篇的代码练手

EmmyLua 注解功能的更多相关文章

  1. Struts2的注解功能

    我们知道通常情况下,Struts2是通过struts.xml配置的.但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<inc ...

  2. springboot~Compiler时开启插件的注解功能

    对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等 ...

  3. Highcharts图表的注解功能

    Highcharts图表的注解功能 在图表中,往往须要对图表总体或者部分元素进行对应注解.帮助浏览者阅读图表.尽管标签组labels能够实现类似的功能.可是其功能相对简单.要实现复杂的注解功能,用户能 ...

  4. @Deprecated注解功能

    @Deprecated注解功能 标记不建议使用的方法,但是仍然可以用 当方法有更好的方法替换时,但是此方法还有使用时可以使用该注解

  5. mybatis的注解功能

    一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一 ...

  6. spring源码解析:元注解功能的实现

    前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...

  7. spring 中的一些注解功能--不定更新

    1@Qualifier注解? 下面的示例将会在Customer的person属性中自动装配Person的值. public class Customer { @Autowired private Pe ...

  8. vert.x框架-使用spring注解功能

    1.前言 习惯了spring注解风格,方便好用,现在用vert.x框架,怎么使用spring注解呢? 2.maven安装依赖包 <!--spring注解依赖包--> <depende ...

  9. spring--启用注解功能

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.spr ...

随机推荐

  1. [gym102832J]Abstract Painting

    考虑每一个圆即对应于区间$[x_{i}-r_{i},x_{i}+r_{i}]$,可以看作对于每一个区间,要求所有右端点严格比其小的区间不严格包含左端点 用$f_{i}$表示仅考虑右端点不超过$i$的区 ...

  2. java8两个字段进行排序问题

    //这个解决问题 Comparator<Anjianxinxi> getLianriqi = Comparator.comparing(Anjianxinxi::getLianriqi). ...

  3. layui增加转圈效果

    var loadix = layer.load(1, {shade: [0.1,'#fff']}); layer.close(loadix);

  4. Atcoder Grand Contest 020 E - Encoding Subsets(记忆化搜索+复杂度分析)

    Atcoder 题面传送门 & 洛谷题面传送门 首先先考虑如果没有什么子集的限制怎样计算方案数.明显就是一个区间 \(dp\),这个恰好一年前就做过类似的题目了.我们设 \(f_{l,r}\) ...

  5. P7708「Wdsr-2.7」八云蓝自动机 Ⅰ

    *X. P7708「Wdsr-2.7」八云蓝自动机 Ⅰ. 摘自 分治与根号数据结构学习笔记 第三部分 莫队 例题 X.. 一道莫队好题.私以为本题最有价值的地方在于对单点修改的转化以及对交换两个数的处 ...

  6. P5509 派遣

    题面传送门. 数论小杂烩( 由题意,对于每个士兵 \(i\),要么选,对答案产生 \(a_i(\frac{x}{i-x})\) 倍的贡献,要么不选,对答案产生 \(1\) 倍的贡献. 由此可知每个士兵 ...

  7. 流量限制器(Flux Limiter)

    内容翻译自Wikipedia Flux limiter 流量限制器(Flux limiters)应用在高精度格式中-这种数值方法用来求解科学与工程问题,特别是由偏微分方程(PDE's)描述的流体动力学 ...

  8. plink 进行PCA分析

    当我们进行群体遗传分析时,得到vcf后,可利用plink进行主成分(PCA)分析: 一.软件安装 1 conda install plink 二.使用流程 第一步:将vcf转换为plink格式 1 p ...

  9. 【Python小试】使用列表解析式简化代码

    列表解析式的好处: 代码简洁 可读性强 运行快 示例 来自<Python编程>中的一个例子:同时投掷两颗面数不同的骰子(如一个6面的D6和一个10面的D10)n次,统计两个骰子点数之和,并 ...

  10. Dreamweaver 2019 软件安装教程

    下载链接:https://www.sssam.com/1220.html#软件简介 Adobe Dreamweaver,简称"DW",DW是集网页制作和管理网站于一身的所见即所得网 ...