MATLAB 文件夹前面的+和@是干啥的 命名空间与函数的重载
Posted slandarer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB 文件夹前面的+和@是干啥的 命名空间与函数的重载相关的知识,希望对你有一定的参考价值。
前言
当你打开MATLAB的toolbox
文件夹时(工具箱存储路径),会发现里面文件夹名称前会有一些奇奇怪怪的符号:
???这里面的+
和@
是干啥的???
为了探究这个问题,我们建立了一个具有如下目录的文件夹:
当前文件夹──@cell──dispTest.m
|
├──@double──dispTest.m
|
├──+test1──+test2──test.m
| |
| └──test.m
|
└──untitled.m
命名空间:路径函数(目录结构体)
如果想要代码整洁条理,很多情况会把一些同一类的工具函数放在一个单独的文件夹里,即你要调用的函数在当前文件夹内的一个文件夹中,想在当前文件夹直接调用这个函数是做不到的,要咋办?
很多人会选择直接addpath
,但这样的话那些工具函数就不止该项目可以调用,其他位置的其他项目也能调用,这样有可能导致命名冲突。
那么一个很简单的方法就是将装工具函数的文件夹命名为+fordername
的形式,就是前面有个+
的形式,实际上就是文件夹路径作为命名空间。
对于我们前面提出的目录的以下部分:
当前文件夹──+test1──+test2──test.m
| |
| └──test.m
|
└──untitled.m
我想要在untitled.m
中调用+test1
文件夹中的test.m
,就可以直接通过以下代码调用:
test1.test()
当然像目录所示,+test1
文件夹里还有个带加号的+test2
文件夹,我们想要调用那个文件夹里的
test.m
,就可以通过如下方式:
test1.test2.test()
这种调用格式非常像是在调用结构体里的函数,这也是我将其称为目录结构体的原因。
函数的重载
当然接下来就要讲目录的这部分是啥:
当前文件夹──@cell──dispTest.m
|
├──@double──dispTest.m
|
└──untitled.m
很像是C++
中的函数的重载哈,两个@classname
的文件夹中右两个名字完全相同的函数。
注意这里说的是@
加上类名称
的格式,可以是MATLAB自带的类,也可以是自己定义的类函数,我们这里就设置了元胞类和双精度类命名的文件夹。
这么设置有啥用呢?这样设置后,比如我再调用dispTest.m
函数的时候,如果输入变量是元胞数组,那么就会调用@cell
文件夹里的该函数,如果输入变量是双精度类型,那么就会调用@double
文件夹里的函数。
也就是说以下的两种写法,用的是不同函数:
dispTest(1)
dispTest(1)
结语
大概就是这个样子,对于+
可以想做结构体,对于@
可以想做重载,本人不同文件夹里的函数定义是这样的:
+test1\\test.m
function test
disp('欢迎关注slandarer forder1')
end
+test1+test2\\test.m
function test
disp('欢迎关注slandarer forder2')
end
@cell\\dispTest.m
function dispTest(coe)
disp('is cell')
end
@double\\dispTest.m
function dispTest(coe)
disp('is double')
end
因此在untitled.m
中运行如下代码,效果如下:
test1.test()
test1.test2.test()
dispTest(1)
dispTest(1)
欢迎关注slandarer forder1
欢迎关注slandarer forder2
is double
is cell
以上是关于MATLAB 文件夹前面的+和@是干啥的 命名空间与函数的重载的主要内容,如果未能解决你的问题,请参考以下文章