EmmyLua 注解功能
前言
网上配置 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 注解功能的更多相关文章
- Struts2的注解功能
我们知道通常情况下,Struts2是通过struts.xml配置的.但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<inc ...
- springboot~Compiler时开启插件的注解功能
对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等 ...
- Highcharts图表的注解功能
Highcharts图表的注解功能 在图表中,往往须要对图表总体或者部分元素进行对应注解.帮助浏览者阅读图表.尽管标签组labels能够实现类似的功能.可是其功能相对简单.要实现复杂的注解功能,用户能 ...
- @Deprecated注解功能
@Deprecated注解功能 标记不建议使用的方法,但是仍然可以用 当方法有更好的方法替换时,但是此方法还有使用时可以使用该注解
- mybatis的注解功能
一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一 ...
- spring源码解析:元注解功能的实现
前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...
- spring 中的一些注解功能--不定更新
1@Qualifier注解? 下面的示例将会在Customer的person属性中自动装配Person的值. public class Customer { @Autowired private Pe ...
- vert.x框架-使用spring注解功能
1.前言 习惯了spring注解风格,方便好用,现在用vert.x框架,怎么使用spring注解呢? 2.maven安装依赖包 <!--spring注解依赖包--> <depende ...
- spring--启用注解功能
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.spr ...
随机推荐
- c++ 中vector 常见用法(给初学者)
c++ 中 vector vector有两个参数,一个是size,表示当前vector容器内存储的元素个数,一个是capacity,表示当前vector在内存中申请的这片区域所能容纳的元素个数. ca ...
- webpack--初试webpack( 核心、体验、资源打包)
前言 webpack是当前前端项目中最常用的资源构建工具,从本文开始,来总结记录一下关于webpack的学习. 正文 1.webpack简介 webpack官网(https://webpack.doc ...
- 90-95年CPU功耗感知调度研究
最近读了三篇1990-1995年的通过调度来降低cpu能耗的文章[1] [2] [3],简单总结一下该年代单核CPU功耗感知的调度策略. Motivation 随着便携式设备逐渐兴起,人们对降低其功耗 ...
- Python实战:截图识别文字,过万使用量版本!(附源码!!)
前人栽树后人乘凉,以不造轮子为由 使用百度的图片识字功能,实现了一个上万次使用量的脚本. 系统:win10 Python版本:python3.8.6 pycharm版本:pycharm 2021.1. ...
- 卸载.net 5.0后使用dotnet提示Found .NET Core SDK
之前安装了预览版本的vs2019后试了下,然后卸载了.但发现控制台执行dotnet相关命令提示Found .NET Core SDK, but did not find dotnet.dll at [ ...
- Qt Creator 源码学习笔记03,大型项目如何管理工程
阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...
- setoolkit的钓鱼实验
1.在kali中打开setoolkit 2.在菜单中选择第一个进入社会工程学攻击 3.选择第二个模块属于网站攻击向量 4.选择第五个模块,进行web劫持攻击 5.选择第二个,进行网站克隆 6.发现访问 ...
- 实验四 Web服务器1-socket编程
一.任务详情基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现: 1. time服务器的客户端服务器,提交程序运行截图 2. echo服务器的客户端服务器,提交程序 ...
- 洛谷 P6295 - 有标号 DAG 计数(生成函数+容斥+NTT)
洛谷题面传送门 看到图计数的题就条件反射地认为是不可做题并点开了题解--实际上这题以我现在的水平还是有可能能独立解决的( 首先连通这个条件有点棘手,我们尝试把它去掉.考虑这题的套路,我们设 \(f_n ...
- Codeforces 1483F - Exam(AC 自动机)
Codeforces 题目传送门 & 洛谷题目传送门 一道 ACAM 的 hot tea 首先建出 ACAM.考虑枚举长串,以及短串在长串中出现的最后位置 \(j\),这个复杂度显然是 \(\ ...