当前位置: 首页 > news >正文

MATLAB 函数签名器

文章目录

  • MATLAB 函数签名器
    • 注释规范
      • 模板
      • 参数类型 kind
      • 数据格式 type
      • 选项的支持
    • 使用
      • 可执行程序
      • 封装为m函数
      • 程序输出
    • 编译
    • 待办事项
    • 推荐阅读
    • 附录

MATLAB 函数签名器

MATLAB 函数签名器 (FUNCSIGN) ,在规范注释格式的基础上为函数文件或类文件自动生成函数签名,并保存至functionSignatures.json。

函数签名能够允许使用者在编辑器调用这些(自定义)函数的时候具备代码提示和自动填充功能,提升编程体验,更多介绍请阅读 自定义代码建议和自动填充 - MATLAB & Simulink - MathWorks 中国。

👍自定义函数代码提示与自动填充:
在这里插入图片描述
在这里插入图片描述

注释规范

模板

为了简化自动化步骤,需要对MATLAB的函数文件和类文件的注释格式进行一定的限制和规范,以下为文件注释模板:

function returnValue = functionName(R1, R2, R3, O1, O2, varargin)
%functionName 函数的简要说明
%
% 函数详细说明
%
% Syntax: (这里添加函数的调用格式, `[]`的内容表示可选参数)
%	returnValue = functionName(R1, R2, R3 ...
%							[, O1, O2 ...
%							 , 'Coeff', 100 ...
%							 , 'k', 1.0 ...
%							 , "Method", "way1"]);
%
% Params:
%   - R1     [required]  [[char], [string]]  R1是char或string
%   - R2     [required]  [numeric; size=2,2] R2为一个2x2的数值矩阵,注意用分号隔开
%   - R3     [required]                      可以省略参数数据格式
%   - O1     [ordered]   [numeric; vector]   可选参数O1
%   - O2     [ordered]   [numeric; nrows=2]  可选参数O2, 函数简要描述将会被记录
%			 可在此处添加O2的详细说明,但是不会被记录到json文件中。
%
%   - Coeff  [namevalue] [numeric]           namevalue对
%            当一个函数存在太多参数设置时, 推荐使用namevalue, 提高可读性, 不需要记忆函
%            数参数位置;
%	- k		 [namevalue] [[numeric], [numeric, choices]] 选项设置
%				* 1.0 可添加选项简要描述, 但是不会别记录
%				* 2.0 没有用引号括起的选项不能包含空格
%				* 3.0 程序会尝试将选项转换为数值,若失败则转换为字符串
%   - Method [namevalue] [char; choices]           选项设置
%  		* 'way1' 方法1
%			选项之间可换行或添加其他说明
%
%       * 'way2' 方法2
%
% Return:
%   - returnValue 返回值
%
% Note:
%   这里可以添加其他描述
%
% Matlab Version: R2021b
%
% See also:
%   myadd, myfun, myfun2, myfun3returnValue = R1; % 正式代码与注释之间留一个空行end

关于模板的几点要求❗和建议✔ :

  • ❗ 函数文件和类文件必须遵循MATLAB语法规则,不能有语法错误:

    • 函数文件function必须位于文件首行,且函数名需与函数文件名保持一致;

    • 类文件classdef 位于文件首行且类名与类文件名一致;

  • ✔ 建议文件注释从文件第二行开始,% 从第一列开始,后跟函数名或类名以及文件简要描述;

  • ✔注释中存在一些关键字,例如 Syntax 后跟函数调用格式,Params后跟函数输入参数描述,Return 后跟返回值等。这些关键字中只有 Params必要的,其他关键字是可选的(也就是说可以自定义增删减改);

  • Params关键字后为函数参数描述内容。注释模板必须要有关键字 Params (关键字后可以紧跟冒号:),程序检测到Params关键字后才会解析后续行的函数参数描述,直到注释结束或检测到一个新的关键字;

  • ❗ 在 Params 后,其他关键字之前的行为函数参数描述,函数的每一个输入参数都需要独立占一行,并且按照如下格式:

    参数标识符 参数名称 [参数类型] [数据格式] 参数简要说明
    
    • 参数标识符 默认为 -,检测到此标识符的行才会被解析,否则会跳过此行的,因此允许函数参数描述行之间添加一些对参数的具体描述(具体例子见模板);

    • [参数类型][数据格式] 可以省略,程序会用默认值([required][numeric])进行替代,但是两者不能互换位置;

    • 参数简要说明 会被记录到 json 文件;

  • ✔ 文件注释结尾处与代码之间留一个空行;

参数类型 kind

与 自定义代码建议和自动填充 - MATLAB & Simulink - MathWorks 中国 规定相同,目前支持以下三种类型:

  • required 参数是必需的,其位置相对于签名对象中的其他必需参数;
  • orderd 参数是可选的,其位置相对于签名对象中的必需参数和前面的可选参数;
  • namevalue 参数是可选的名称-值对组,名称-值对组参数出现在函数签名的末尾,但这些对组可以按任意顺序指定。

✔ 参数类型可以使用首字母缩写,即[r]/[R]来表示[required][o]/[O]来表示[orderd][n]/[N]来表示[namevalue]

✔ 参数类型 kind 可以省略,默认为 [required]

❗ 参数类型 kind 必须位于数据格式 type 之前;

❗ 根据 MATLAB 的要求,函数参数需要按照 required、orderd、namevalue类型依次排列,即函数输入先放必要参数,再放可选参数,最后放namevalue参数。

数据格式 type

与 自定义代码建议和自动填充 - MATLAB & Simulink - MathWorks 中国 基本一致,但又有几点不同,我们将结合 MATLAB 的说明文档进行说明:

type 属性可以定义参数是哪个类以及参数必须具有哪些属性。

  • 要匹配一个类或属性,请使用单个 JSON 字符串。例如,如果参数必须是数值,则指定 "type":"numeric"

    注释数据格式为 [numeric]

  • 要匹配所有类或属性,请使用 JSON 字符串列表。例如,如果某个参数必须既是数值又是正数,则指定 "type":["numeric", ">=0"]

    注释数据格式为 [numeric; >=0]

  • 要匹配多个类或属性中的任意多个,请使用 JSON 字符串列表的列表。在内层列表,MATLAB 对各值执行逻辑 AND 运算。在外层列表,MATLAB 对各值执行逻辑 OR 运算。例如,如果参数必须要么是正数,要么是 containers.Map 对象,则指定 "type":[["numeric", ">=0"],["containers.Map"]]

    注释数据格式为 [[numeric; >=0], [containers.Map]]

  • 提供参数选项 ["char", "choices={'way1', 'way2'}"]

    注释数据格式为 [char; choices],选项由选项行提供

注释数据格式总结为:

  1. 不需要使用引号括起每一项;
  2. 同一列表之间项用 ; 隔开,它们是并&&的关系;
  3. 不同列表之间用,隔开,不同列表是或 || 的关系;
  4. 全新的选项支持

✔ 数据格式 kind 可以省略,则默认为 [numeric]

❗ 数据格式 kind 必须位于参数类型 kind 之后。

选项的支持

当数据格式中包含 choices时,程序会将此行(包含choices)与下一个包含参数描述/关键字的行之间的行识别为选项行。每一个选项独占一行,选项的描述格式为:

选项标识符 选项名称 选项说明
  • 选项标识符 默认为 *,检测到此标识后此行才会被解析,因此选项之间可以留空或者添加具体的选项描述;
  • 选项名称 选项名称可以用'"括起(选项名称可以有空格),或者不用引号(选项名称不允许有空格),选项名称会被记录到 json,程序会尝试将选项名称转换为数字(如果可以),若转换失败则为字符串;
  • 选项说明 选项简要说明,不会记录到 json,也可以不写。

❗ 选项标识符不能与参数标识符相同!

例 1:

- Method [namevalue] [choices] 选择一个方法* 'add'       方法1* 'subtract'  方法2* 'multi'     方法3

转换 json 字符串为 "choices={'add', 'subtract', 'multi'}"

例 2:

- Method [R] [char; choices] 选择一个方法* add       方法1* subtract  方法2* multi     方法3

转换 json 字符串为 "char", "choices={'add', 'subtract', 'multi'}"

例 3:

- Coeff [R] [int; choices] 选择一个方法* 1       * 2* 3

转换 json 字符串为 "int", "choices={1, 2, 3}"

使用

可执行程序

可执行程序为 dst/signfunc.exe,其运行指令为

signfun.exe <DirPath> [-ag -] [-op *] [-ver 1.0.0] [-info on/off]  [-kind required] [-type numeric]

其中,必须指定目标文件夹的路径 DirPath,其他几项为可选项:

  • -ag 是参数标识符,默认为 -
  • -op 是选项标识符,默认为 *
  • -ver 是签名文件的版本呢信 息,默认为 1.0.0
  • -log 是否输出详细信息,默认为 on
  • -kind 设置默认参数kind,默认为 required,不建议修改
  • -type 设置默认参数type,默认为 numeric,不建议修改

❗ 注意,需要将可执行程序的路径添加到系统环境路径中。

封装为m函数

封装的m函数为 dst/hs_signfunc.m,其调用格式为

status = hs_signfunc(dir_path ...[, "Verbose", true ..., "ArgSym", '-' ..., "OptSym", '*' ..., "Version", "1.0.0" ..., "DefaultKind", 'required' ..., "DefaultType", {"numeric"}]);

具体的函数参数说明见函数文件 hs_signfunc.m。

注意:

  • ❗ 需要将可执行程序 signfunc.exe 的路径添加到系统环境路径中;

  • ❗ 需要将m函数文件 hs_signfunc.m 添加到 MATLAB 路径中。

程序输出

程序运行后会在指定目录下生成函数签名文件 functionSignatures.json 和日志文件 funcsigner.log。

可以调用 validateFunctionSignaturesJSON(json_path) 来检验函数签名文件格式是否正确。检查格式无误后,可能需要重启 MATLAB 才能激活自定义函数代码提示功能。

编译

  • 源码:https://gitee.com/iam002/funcsign

  • 编译环境:

    • VSCode + cmake插件+ cpp插件
    • cmake
    • VS 2019 amd64

    ✔ 软件安装好后,打开VSCode进入当前文件夹,打开命令面板,执行 cmake configure,在底部改为Release模式,再执行 cmake build target 后选择 install。

  • 依赖第三方库(已放置到 thirdparty)

    • easyloggingpp
    • jsoncpp

当然,也可以通过命令行的方式进行编译

mkdir build
cd build
cmake  -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release -A x64
cmake install

等待编译完成后可执行程序保存在 dst,将其添加到系统路径和MATLAB路径,即可使用。

待办事项

  • 由于 jsoncpp 不能按照插入顺序进行输出,在调用 validateFunctionSignaturesJSON 会有如下信息。但经实测,函数签名仍有效;

    “_schemaVersion” 必须是文件中的第一个属性。

  • 为什么不提供 mex 文件

    mex 接口对中文支持实在不友好,输入到终端的字符顺序又有点乱😂,目前还没有解决方法;使用 system 调用可执行程序已经很好满足需求了,不再考虑通过mex来封装了。

  • 跨平台支持

推荐阅读

  • 自定义代码建议和自动填充 - MATLAB & Simulink - MathWorks 中国
  • 验证 functionSignatures.json 文件 - MATLAB validateFunctionSignaturesJSON - MathWorks 中国
  • 声明函数参数验证 - MATLAB arguments - MathWorks 中国
  • iam002/funcsign (gitee.com)

附录

注释模板的函数签名文件:

{"_schemaVersion" : "1.0.0","functionName" : {"inputs" : [{"kind" : "required","name" : "R1","purpose" : "R1是char或string","type" : [["char"],["string"]]},{"kind" : "required","name" : "R2","purpose" : "R2为一个2x2的数值矩阵,注意用分号隔开","type" : ["numeric","size=2,2"]},{"kind" : "required","name" : "R3","purpose" : "可以省略参数数据格式","type" : ["numeric"]},{"kind" : "ordered","name" : "O1","purpose" : "可选参数O1","type" : ["numeric","vector"]},{"kind" : "ordered","name" : "O2","purpose" : "可选参数O2, 函数简要描述将会被记录","type" : ["numeric","nrows=2"]},{"kind" : "namevalue","name" : "Coeff","purpose" : "namevalue对","type" : ["numeric"]},{"kind" : "namevalue","name" : "k","purpose" : "选项设置","type" : [["numeric"],["numeric","choices={1.0, 2.0, 3.0}"]]},{"kind" : "namevalue","name" : "Method","purpose" : "选项设置","type" : ["char","choices={'way1', 'way2'}"]}]}
}

相关文章:

MATLAB 函数签名器

文章目录 MATLAB 函数签名器注释规范模板参数类型 kind数据格式 type选项的支持 使用可执行程序封装为m函数程序输出 编译待办事项推荐阅读附录 MATLAB 函数签名器 MATLAB 函数签名器 (FUNCSIGN) &#xff0c;在规范注释格式的基础上为函数文件或类文件自动生成函数签名&#…...

2019强网杯随便注bugktu sql注入

一.2019强网杯随便注入 过滤了一些函数&#xff0c;联合查询&#xff0c;报错&#xff0c;布尔&#xff0c;时间等都不能用了&#xff0c;尝试堆叠注入 1.通过判断是单引号闭合 ?inject1-- 2.尝试堆叠查询数据库 ?inject1;show databases;-- 3.查询数据表 ?inject1;show …...

Html+Css+Js计算时间差,返回相差的天/时/分/秒(从未来的一个日期时间到当前日期时间的差)。

Html部分 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><link rel"stylesheet" type"text/css" href"css/index.css" /><script src"js/index.js" t…...

mybatis项目启动报错:reader entry: ���� = v

问题再现 解决方案一 由于指定的VFS没有找&#xff0c;mybatis启用了默认的DefaultVFS&#xff0c;然后由于DefaultVFS的内部逻辑&#xff0c;从而导致了reader entry乱码。 去掉mybatis配置文件中关于别名的配置&#xff0c;然后在mapper.xml文件中使用完整的类名。 待删除的…...

【GIT版本控制】--什么是版本控制

一、为什么需要版本控制&#xff1f; 版本控制是在软件开发和许多其他领域中非常重要的工具&#xff0c;因为它解决了许多与协作、追踪更改和管理项目相关的问题。以下是一些主要原因&#xff0c;解释了为什么需要版本控制&#xff1a; 追踪更改历史: 版本控制系统允许您准确…...

ChatGPT付费创作系统V2.3.4独立版 +WEB端+ H5端 + 小程序最新前端

人类小徐提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff0…...

GEE16: 区域日均降水量计算

Precipitation 1. 区域日均降水量计算2. 降水时间序列3. 降水数据年度时间序列对比分析 1. 区域日均降水量计算 今天分析一个计算区域日均降水量的方法&#xff1a; 数据信息&#xff1a;   Climate Hazards Group InfraRed Precipitation with Station data (CHIRPS) is a…...

打开MySQL数据库

在命令行里输入mysql --version就可以查看&#xff1a; mysql -uroot -p之前设置的密码&#xff08;不用输入&#xff09;就可登录成功&#xff1a;...

玩转ChatGPT:DALL·E 3生成图像

一、写在前面 好久不更新咯&#xff0c;因为没有什么有意思的东西分享的。 今天更新&#xff0c;是因为GPT整合了自家的图像生成工具&#xff0c;名字叫作DALLE 3。 DALLE 3是OpenAI推出的一种生成图像的模型&#xff0c;它基于GPT-3架构进行训练&#xff0c;但是它的主要目…...

小程序入门笔记(一) 黑马程序员前端微信小程序开发教程

微信小程序基本介绍 小程序和普通网页有以下几点区别&#xff1a; 运行环境&#xff1a;小程序可以在手机的操作系统上直接运行&#xff0c;如微信、支付宝等&#xff1b;而普通网页需要在浏览器中打开才能运行。 开发技术&#xff1a;小程序采用前端技术进行开发&#xff0c;…...

【进程管理】初识进程

一.何为进程 教材一般会给出这样的答案: 运行起来的程序 或者 内存中的程序 这样说太抽象了&#xff0c;那我问程序和进程有什么区别呢&#xff1f;诶&#xff1f;这我知道&#xff0c;书上说&#xff0c;动态的叫进程&#xff0c;静态的叫程序。那么静态和动态又是什么意思…...

ArcGIS Maps SDK for JS:监听按钮点击事件控制图层的visible属性

文章目录 1 需求描述2 解决方案 1 需求描述 现在有这么一个需求&#xff1a;在地图中添加一些图层&#xff0c;添加图层列表按钮。打开图层列表后用户会打开某些图层使其可见&#xff0c;要求关闭图层列表时&#xff0c;隐藏某些图层&#xff08;若visibletrue&#xff09; 2…...

微信小程序-1

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 报错在调试器的console里找 一、结构 Ctrl 放大字体 Ctrl - 缩小 设置 - - - 外观设置 - - - 可以修改喜欢的主题颜色 index.js index.json index.wxml 》 html <view class"box&qu…...

不容易解的题10.5

31.下一个排列 31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/next-permutation/?envTypelist&envIdZCa7r67M会做就不算难题&#xff0c;如果没做过不知道思路&#xff0c;这道题将会变得很难。 这道题相当于模拟cpp的next_permu…...

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么&#xff1f;HTTP & HTTPS 2、HTTP&#xff0c;用户后续的操作&#xff0c;服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器&#xff1f;4、hashmap是线…...

使用Jest测试Cesium源码

使用Jest测试Cesium源码 介绍环境Cesium安装Jest安装Jest模块包安装babel安装Jest的VSC插件 测试例子小结 介绍 在使用Cesium时&#xff0c;我们常常需要编写自己的业务代码&#xff0c;其中需要引用Cesium的源码&#xff0c;这样方便调试。此外&#xff0c;目前代码中直接使用…...

buuctf-[GXYCTF2019]禁止套娃 git泄露,无参数rce

用dirsearch扫一下&#xff0c;看到flag.php 访问一下没啥东西&#xff0c;使用githack python2 GitHack.py http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn/.git/查看index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;…...

【逐步剖C】-第十一章-动态内存管理

一、为什么要有动态内存管理 从我们平常的学习经历来看&#xff0c;所开辟的数组一般都为固定长度大小的数组&#xff1b;但从很多现实需求来看需要我们开辟一个长度“可变”的数组&#xff0c;即这个数组的大小不能在建立数组时就指定&#xff0c;需要根据某个变量作为标准。…...

【树】树的直径和重心

目录 一.树的直径 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;思路 &#xff08;3&#xff09;例题 &#xff08;4&#xff09;std(第一小问) 二.树的重心 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;求重心 &#xff08;3&#xff09;例…...

《Attention Is All You Need》论文笔记

下面是对《Attention Is All You Need》这篇论文的浅读。 参考文献&#xff1a; 李沐论文带读 HarvardNLP 《哈工大基于预训练模型的方法》 下面是对这篇论文的初步概览&#xff1a; 对Seq2Seq模型、Transformer的概括&#xff1a; 下面是蒟蒻在阅读完这篇论文后做的一…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...