gpt4 book ai didi

matlab - 重载! (爆炸)运算符(operator)

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:34 27 4
gpt4 key购买 nike

在对 this question 的回答中MathWorks 支持团队声明:

It is also possible to overload the ! (bang) operator by creating a file called "!.m" and having this file be before the directory $MATLABROOT\toolbox\matlab\general in the MATLAB search path.

这个我试过了,好像不行。我在 Linux Mint 上运行 Matlab 9.1.0.441655 (R2016b)。我的路径看起来像这样:

/home/raphael/Programs/Test
/usr/local/MATLAB/R2016b/toolbox/matlab/iofun
...
/usr/local/MATLAB/R2016b/toolbox/matlab/general
...

并且我在 /home/raphael/Programs/Test 中创建了一个文件 !.m。无论我在此文件中放入什么,编辑器都会显示错误:

Line 1: Unable to run code analysis. '/home/raphael/Programs/Test/!.m' is an invalid file name.

作为! (bang) 运算符未在 Operators and associated function list 中列出, 不清楚要在 !.m 文件中放入什么。

尽管如此,我还是尝试输入一些代码:

function bang(c)

disp(c)

但是尽管 which ! 返回我的自定义文件路径,Matlab 总是调用内置运算符:

>> which !
/home/raphael/Programs/Test/!.m

>> !pwd
/home/raphael/Programs/Test

将文件重命名为 bang.m 可以解决错误,但对 bang 运算符没有影响。

所以:

  • 自 R2012 以来,Matlab 的行为是否发生了变化?
  • 怎么能让 ! (爆炸)接线员?
  • 如果这真的可行,函数声明的语法应该是什么?

最佳答案

看起来这种未记录的 !.m 处理在 R2015b 中消失了(可能是随着该版本引入的新执行引擎更改)。

对于早于 R2015b 的版本,您确实可以在路径上命名一个文件 !.m,然后该文件的函数名称并不重要(因为它在 MATLAB 中从来没有这样做过)。

!.m

function bang(varargin)
disp('bang!')
end

在当前版本的 MATLAB 中,! 运算符将忽略您的 !.m 文件,但会调用底层的 system unixdos 命令。因此,您需要重载那些 命令。

所以在 OS X 上,重载 unix.m 就可以了:

unix.m

function varargout = unix(varargin)
disp('My Unix Command')
[varargout{1:nargout}] = builtin('unix', varargin{:});
end

关于matlab - 重载! (爆炸)运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com