函数名称在 MATLAB 中必须是唯一的。如果不是,则存在重复名称,则 MATLAB 将使用在您的搜索路径中找到的第一个名称。
话虽如此,您有几个选择。
选项 1. 使用 @ 目录,将每个版本放在单独的目录中。本质上,您正在使用 MATLAB 将函数应用于特定类的能力。因此,您可以设置一对目录:
@char
@double
将您的 myfun.m 副本放在相应的目录中。现在,当 MATLAB 看到 myfun 的双重输入时,它会将调用定向到双重版本。当 MATLAB 获得 char 输入时,它会转到 char 版本。
当心。不要将这些 @ 目录明确地放在您的搜索路径上。请务必将它们放在搜索路径上的目录中。
这种方案的一个问题是,如果您使用 SINGLE 精度输入调用函数,MATLAB 可能会很合适,因此您需要单独版本的 single、uint8、int8、int32 等。您不能只有一个版本用于所有数字类型。
选项 2。只有一个版本的函数,它测试第一个参数以查看它是数字还是字符,然后分支以执行适当的任务。这两段代码将最简单地放在一个文件中。简单的方案将具有子函数或嵌套函数来完成工作。
选项 3. 以不同的方式命名函数。嘿,这不是世界末日。
选项 4:正如 Shaun 所指出的,可以简单地更改当前目录。MATLAB 总是首先在您的当前目录中查找,因此它会根据需要在该目录中查找函数。一个问题是这很耗时。每当您触摸目录时,事情都会变慢,因为现在需要磁盘输入。
更改目录最糟糕的部分在于您如何使用 MATLAB。根据他们希望运行的代码输入,强制用户始终位于特定目录中是(恕我直言)一种糟糕的编程风格。更好的是数据驱动方案。如果您要读入或写出数据,请在该目录中。使用 MATLAB 搜索路径对所有函数进行分类,因为函数往往变化不大。与要求用户根据调用给定函数的方式迁移到特定目录相比,这是一种更简洁的工作方式。
就个人而言,我倾向于建议选项 2 为最佳。它是干净的。它只有一个您需要使用的主要功能。如果要保留功能区,请将它们作为单独的嵌套或子功能放在主功能体内。当然,根据它们的驱动方式,它们将具有不同的名称。