如何在Scilab中基于现有代码创建可调用自定义工具箱
完全可以实现,Scilab原生支持自定义工具箱打包,配置完成后即可像print、disp等内置函数一样直接调用,具体操作步骤如下:
1 代码预处理
- 首先将所有需要对外暴露的可调用函数(包括你的主程序逻辑、需要开放给外部使用的子例程)统一整理为
.sci格式:如果你的主程序当前是直接运行的.sce脚本,需要改写为函数结构,示例如下,修改后保存为[函数名].sci:
function [输出参数1, 输出参数2] = 你的主函数名(输入参数1, 输入参数2) // 原.sce文件的逻辑写在这里 endfunction
- 不需要对外暴露的内部子例程可保留原有逻辑,统一存放即可。
2 搭建标准工具箱目录结构
Scilab工具箱有固定目录规范,首先新建一个根目录(命名示例:phd_calc_toolbox),目录内包含以下子目录和文件:
/src:存放所有.sci源码文件,包括对外暴露函数和内部子例程/etc:存放工具箱启停配置文件,必须包含[工具箱名].start和[工具箱名].quit两个文件/help:可选,存放自定义的函数帮助文档,配置完成后用户可通过help [函数名]直接查询用法loader.sce:工具箱加载入口脚本
3 编写核心配置文件
3.1 etc/[工具箱名].start
工具箱加载时自动执行的脚本,作用是加载所有函数到Scilab工作区,示例内容:
// 获取当前文件所在路径 current_path = get_absolute_file_path("[工具箱名].start"); // 切换到源码目录加载所有sci文件 chdir(current_path + "../src/"); exec("*.sci", -1); // -1代表静默加载,不会打印加载日志 // 切回原路径 chdir(current_path);
3.2 loader.sce
根目录下的对外加载入口,示例内容:
toolbox_root = get_absolute_file_path("loader.sce"); exec(toolbox_root + "etc/[工具箱名].start"); disp("[你的工具箱名] 已成功加载,可直接调用对应函数");
3.3 etc/[工具箱名].quit
工具箱卸载时执行的脚本,没有特殊清理需求可以留空。
注意:所有配置文件中的
[工具箱名]需要和你根目录的工具箱名称保持一致,避免路径匹配错误。
4 本地测试调用
- 打开Scilab,切换工作目录到你的工具箱根目录,执行
exec("loader.sce") - 加载完成后即可直接通过函数名+参数的方式调用,和内置函数使用逻辑完全一致,不需要再手动exec单个
.sci文件。
5 打包为可自动安装的原子包(可选)
如果需要更便捷的分发、避免每次手动执行loader,可以打包为Scilab官方的.atoms安装包:
- 在工具箱根目录新增
description.xml文件,填写工具箱名称、版本、作者、适配的Scilab版本等基础信息 - 在Scilab命令行执行
atomsCreateToolbox("你的工具箱根目录绝对路径", "安装包输出路径")即可生成.atoms格式的安装包 - 其他设备上执行
atomsInstall("安装包路径/xxx.atoms")即可完成自动安装,后续Scilab启动时会自动加载工具箱,不需要手动执行加载脚本。
注意事项:对外暴露的函数命名不要和Scilab内置函数、已安装的其他工具箱函数重名,避免命名冲突导致调用异常。
内容的提问来源于stack exchange,提问作者Shankarmani G
相关产品推荐
相关产品推荐

