您将需要一个始终位于 Matlab 路径上的目录。这可以通过adding one in the startup.m script来实现。
那么你应该把下面的函数savefunc.m保存到那个目录,这样你就可以随时调用它了。
function savefunc(FuncName, Directory)
% Set directory if not given, default is working directory
if nargin < 2; Directory = pwd; end
% Get active document
ActiveDoc = matlab.desktop.editor.getActive;
% Set FuncName if not given, or if FuncName was empty string
if nargin < 1 || strcmp(FuncName, '');
% Get function name
FuncName = ActiveDoc.Text; % Entire text of document
% Could use indexing to only take first n characters,
% and not load entire string of long function into variable.
% FuncName = ActiveDoc.Text(1:min(numel(ActiveDoc.Text), n));
FuncName = strsplit(FuncName, '('); % Split on parenthesis
FuncName = FuncName{1}; % First item is "function [a,b,c] = myFunc"
FuncName = strsplit(FuncName, ' '); % Split on space (functions don't always have equals)
FuncName = strtrim(FuncName{end}); % Last item (without whitespace) is "myFunc"
end
% Save the file
saveAs(ActiveDoc, fullfile(Directory, [FuncName, '.m']));
end
现在,假设您刚刚创建了以下Untitled.m:
function [a,b,c] = mytest()
a = 1; b = 1; c = 1;
end
快捷方式:打开Untitled.m,然后在命令行窗口中输入
savefunc()
Untitled.m 将在当前工作目录中保存为mytest.m。请注意,如果您愿意,您还可以传递不同的函数名称和另存为目录,这对其他场合很有用。
如果你想指定目录但使用自动命名,你可以传递一个空字符串作为FuncName。
您可以使用matlab.desktop.editor.getAll 扩展此功能以获取所有打开的文档,然后遍历它们进行保存。
如需更多信息,请在命令行窗口中输入help matlab.desktop.editor,似乎缺少在线文档。
matlab.desktop.editor:以编程方式访问 MATLAB 编辑器以打开、更改、保存或关闭
文件。
最后,请注意不需要“保存成功”类型的消息,因为您会看到文件名更改,并且如果失败也会收到错误消息(来自 saveAs 文档):
如果在 saveAs 操作期间发生任何错误,MATLAB 将引发 MATLAB:Editor:Document:SaveAsFailed 异常。如果操作返回而没有抛出异常,则假定操作成功。