子函数和私有函数-恶意代码分析实战英文原版pdf
在MATLAB中,我们可以在一个文件中创建多个函数。如果一个文件中有多个函数,那么最上面的那个函数是普通函数,下面的函数称为子函数或中间函数。子函数看起来和普通函数一样,但它们只能被同一文件中的函数调用。比如,下面的例子定义了一个函数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;
end
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
end
end
私有函数是指那些属于以private
为名字的子目录中的函数。这些函数只有在父目录中才是可见的。假设在MATLAB搜索路径中有一个testing
目录,在testing
目录中,又有一个private
子目录。private
中的函数只能由testing
中的函数调用。因为对于父目录以外的目录私有函数是不可见的,所以它们能和其他目录中的函数重名。举个例子,如果你在MATLAB搜索路径中创建了一个private
子目录,就等于你拥有了一个隐秘的“地下室”!
为了创建一个私有目录,只需要在包含函数的目录中创建一个private
子目录。这样一来,你的私有函数就不会出现在搜索路径中,也不会和其他目录中的函数发生命名冲突。MATLAB会先查找子函数,然后再查找私有函数,最后才会查找标准搜索路径中的函数。比如,如果你有一个私有函数test.m
,MATLAB会先找到私有函数test.m
,再找到非私有M文件test.m
。这种查找顺序使得你能够放心地创建私有函数,而不必担心命名冲突。
如果你希望MATLAB函数只能由其他函数调用,而不允许操作者直接调用,可以考虑用子函数或私有函数来隐藏它们。隐藏这些函数不仅防止了它们被偶然使用,也能防止与其他公共函数重名时发生的冲突。好的编程习惯是用子函数或私有函数来隐藏那些有特殊用途的函数,这些隐藏的函数只能被其他函数调用。
想了解更多关于MATLAB子函数的使用方法吗?你可以参考这些资源:矩阵拆分MATLAB子函数,MATLAB子函数调用方法说明子函数调用,以及MATLAB子函数function用法示例。
这些隐藏的函数就像是一个秘密武器,既能保护你的代码安全,又能提高程序的可靠性。你是不是也想试试呢?