MATLAB - 私有函数
MATLAB - 私有函数
Section titled “MATLAB - 私有函数”在 MATLAB 中,私有函数是代码组织和封装的基本工具。它们允许您限制函数的可见性,使其只能由同一父文件夹内的其他函数访问。这种做法对于通过隐藏实现细节并防止意外的外部使用来构建健壮、可维护和模块化的应用程序至关重要。
什么是私有函数?
Section titled “什么是私有函数?”私有函数是一个常规 MATLAB 函数(.m 文件),您将其放置在名为 private 的特殊子文件夹中。此 private 子文件夹中的函数只能由位于其直接父目录中的脚本和函数调用。它们对 MATLAB 路径不可见,不能从命令窗口或任何其他位置调用。
此作用域规则有助于:
- 封装:隐藏不应公开使用的辅助函数。
- 避免命名冲突:您可以拥有与公共函数同名的私有函数(例如
calculate.m)而不会发生冲突,因为当从父目录调用时,MATLAB 会优先使用私有版本。 - 代码组织:将内部实用函数组合在一起,从而实现更清晰的项目结构。
创建和使用私有函数
Section titled “创建和使用私有函数”让我们通过一个实用示例来了解。假设您正在构建一个简单的分析工具。主函数将执行计算,该计算依赖于内部辅助函数来格式化结果。这个辅助函数是私有函数的完美候选者。
首先,设置您的项目文件夹结构:
myAnalysisProject/├── analyzeData.m % 这是我们的主要公共函数└── private/ └── formatResult.m % 这是我们的辅助私有函数- 创建私有函数
在 private 子文件夹内,创建一个名为 formatResult.m 的文件,内容如下。此函数将接收一个数值结果和一个单位字符串,并将它们格式化为整洁的文本摘要。
function formattedStr = formatResult(value, unit)% formatResult 将数值及其单位格式化为字符串。% 这是一个私有函数,不应供外部使用。
arguments value (1,1) {mustBeNumeric} unit (1,1) string = "units" end
formattedStr = sprintf("Analysis Result: %.2f %s", value, unit);end请注意 arguments 块的使用。这是一种用于健壮函数输入验证的现代 MATLAB 特性,也是一种最佳实践。
- 创建公共函数
在父目录(myAnalysisProject)中,创建主函数 analyzeData.m。此函数将调用我们的私有 formatResult 函数。
function analyzeData(data)% analyzeData 执行简单分析并显示结果。% 它使用一个私有辅助函数来格式化输出。
arguments data {mustBeNumeric} end
% 执行一些简单的计算 meanValue = mean(data, 'all');
% 使用私有函数格式化输出 resultString = formatResult(meanValue, "kg");
% 显示最终结果 disp(resultString);end- 运行代码
现在,在 MATLAB 中导航到 myAnalysisProject 文件夹,并从命令窗口调用公共函数:
data = [10.2, 11.5, 9.8, 10.5];analyzeData(data)输出将是:
Analysis Result: 10.50 kg如果您尝试直接从命令窗口调用私有函数,MATLAB 将会抛出一个错误,因为它找不到该函数:
formatResult(10.50, "kg")Unrecognized function or variable 'formatResult'.这展示了强制封装。然而,您仍然可以使用 help 命令和相对路径查看其帮助文档:
help private/formatResult
formatResult 将数值及其单位格式化为字符串。 这是一个私有函数,不应供外部使用。私有函数 vs. 公共函数
Section titled “私有函数 vs. 公共函数”以下是它们之间区别的清晰细分:
- 作用域:有限。只能由其直接父目录中的函数和脚本访问。
- 位置:必须放置在一个名为
private的子文件夹中。 - 目的:非常适合辅助函数、实现细节以及不应暴露给代码最终用户的内部实用工具。
- 最佳实践:使用它们可以提高代码清晰度并防止内部组件被误用。它们是创建健壮工具箱和应用程序的基石。
- 作用域:全局。只要其所在的文件夹在 MATLAB 路径上或是当前工作目录,就可以从 MATLAB 中的任何位置访问。
- 位置:可以位于任何标准文件夹中(
private除外)。 - 目的:代表您的应用程序或工具箱的主要 API 或入口点。这些是您打算供他人(或未来的自己)使用的函数。
- 最佳实践:设计公共函数时,应具有清晰、良好文档化的接口和健壮的错误处理,因为它们构成了您的软件契约。