m_p*_*wer 9 matlab overloading function
首先,这里是我调用函数的方式:
eval([functionName '(''stringArg'')']); % functionName = 'someStringForTheFunctionName'
Run Code Online (Sandbox Code Playgroud)
现在,我functionName在我的路径中有两个功能,一个接受stringArg另一个功能,另一个接受其他功能.我遇到了一些错误,因为现在它找到的第一个错误是没有错误的函数stringArg.考虑到我调用functionName函数的方式,如何调用正确的函数?
编辑:
我试过这个功能which:
which -all someStringForTheFunctionName
Run Code Online (Sandbox Code Playgroud)
结果 :
C:\........\x\someStringForTheFunctionName
C:\........\y\someStringForTheFunctionName % Shadowed
Run Code Online (Sandbox Code Playgroud)
阴影函数是我想要调用的函数.
小智 7
函数名在MATLAB中必须是唯一的.如果不是,那么有重复的名称,那么MATLAB使用它在搜索路径上找到的第一个名称.
话虽如此,有几个选项可供您使用.
选项1.使用@目录,将每个版本放在一个单独的目录中.基本上,您正在使用MATLAB的功能将函数应用于特定的类.因此,您可以设置一对目录:
@char
@double
Run Code Online (Sandbox Code Playgroud)
将myfun.m的副本放在相应的目录中.现在,当MATLAB看到myfun的双输入时,它会将调用指向双版本.当MATLAB获得char输入时,它将转到char版本.
小心.不要在搜索路径上明确地放置这些@目录.请将它们放在搜索路径上的目录中.
这个方案的一个问题是如果你用SINGLE精度输入调用函数,MATLAB可能会适合,所以你需要单独的版本,单个,uint8,int8,int32等.你不能只有一个版本的所有数字类型.
选项2.只有一个版本的函数,它测试第一个参数以查看它是数字还是字符,然后分支以执行任一适当的任务.这两段代码最简单的就是在一个文件中.简单的方案将具有子函数或嵌套函数来完成工作.
选项3.以不同方式命名函数.嘿,它不是世界末日.
选项4:正如Shaun所指出的,可以简单地改变当前目录.MATLAB始终在当前目录中首先查找,因此它将根据需要在该目录中找到该函数.一个问题是这是耗时的.每次触摸目录时,事情都会变慢,因为现在需要磁盘输入.
更改目录最糟糕的部分在于如何使用MATLAB.(IMHO)是一种糟糕的编程风格,迫使用户根据他们希望运行的代码输入始终位于特定目录中.更好的是数据驱动方案.如果您要读入或写出数据,那么请在THAT目录中.使用MATLAB搜索路径对所有功能进行分类,因为功能往往不会发生太大变化.这是一种更清晰的工作方式,而不是要求用户根据他们调用给定函数的方式迁移到特定目录.
就个人而言,我倾向于建议选项2为最佳选择.它是干净的.它只有一个您需要使用的主要功能.如果要保留函数分区,请将它们作为单独的嵌套或子函数放在主函数体内.当然,根据它们的驱动方式,它们将具有不同的名称.