子函数和私有函数-大学物理知识点总结
5.7子函数和私有函数
在一个单个的文件中我们可以创建多个函数。如果超过1个的函数出现在一个文件中,那么最上面的那个函数为普通函数,下面的函数称为子函数或中间函数。子函数看起来和普通函数一样,但是只能被同一文件中的函数调用。下面的例子定义了一个函数mystats和两个子函数mean和median。函数mystats能被其他的MATLAB函数调用,但是子函数mean和median只能同一文件中的其他函数调用。
function [avg, med] = mystats(u)
%MYSTATS Find mean and median with internal functions.
% Function MYSTATS calculates the average and median
% of a data set using subfunctions.
n = length(u);
avg = mean(u, n);
med = median (u, n);
function a = mean(v, n)
% Subfunction to calculate average.
a = sum(v) / n;
function m = median(v, n)
% Subfunction to calculate median
w = sort(v);
if rem(n, 2) == 1
m = w((n + 1) / 2);
else
m = (w(n / 2) + w(n / 2 + 1)) / 2;
end
私有函数是指属于以private为名字的子目录中的函数。这些函数只有在父目录中才是可见的。假设在MATLAB搜索路径中有一testing目录,在testing目录中,又有一个private子目录。private中的函数只能由testing中的函数调用。因为对于父目录以外目录私有函数是不可见的,所以它能用其他目录中的函数重名。有了这种特性,如果你要创建自己的函数,则不必要考虑与其他目录重名。
想深入了解子函数的调用方法?你可以查阅matlab子函数调用方法说明子函数调用.pdf。或者,如果你对函数堆栈解析感兴趣,不妨看看main函数调用子函数堆栈解析!这些资源能让你对MATLAB函数有更深刻的理解。
因为MATLAB先对私有函数查找,然后再对标准的M文件函数进行查找,所以它将首先找到私有函数test.m,再找到非私有M文件test.m。在包含函数的目录中创建private子目录,这样就创建了你的私有目录。不要在你的搜索路径中放置你的私有目录。
在一个M文件中,调用一个函数,MATLAB先检查看他是否是一个子函数。如果它不是那就检查它是不是一个私有函数。如果也不是私有函数,MATLAB就会检查它在不在标准搜索路径中。如果你有特殊的目的,MATLAB函数只能由其他的函数调用,而且不允许操作者直接调用,可以考虑用子函数或私有函数来隐藏它们。隐藏这些函数防止了它们偶然的使用,也能防止与其他公共函数重名时发生的冲突。
通过这样的方法,我们不仅能够有效地组织和管理代码,还能避免一些不必要的麻烦。想进一步探讨MATLAB的子函数实现分段函数?可以参考matlab的m文件子函数实现分段函数这份资源。是否觉得有趣?快去尝试一下吧!
好的编程习惯用子函数或私有函数来隐藏特殊目的的函数,这些隐藏的函数只能被其他函数调用。隐藏这些函数防止了它们偶然的使用,也能防止与其他公共函数重名时发生的冲突。