我有一个具有多个子函数的函数,一切都是句柄类的一部分。这可以通过以下说明(私有函数没有循环依赖,一些东西依赖于对象):
function out = f1(obj, in)
out = f2(obj, f3(in * obj.Thickness));
end
function out = f2(obj, in)
out = f3(in / obj.NumLayers);
end
function out = f3(in)
out = in;
end
文件f1.m
位于@MyClass
文件夹中。
我决定将所有这些文件放在类中,并在制作最终包时删除@MyClass
文件夹(我现在就在那时)。
此时,类结构是
classdef MyClass < handle
properties
prop1
end
methods
function obj = MyClass(varargin) ...
function out = f1(obj, in)
end
methods (Access = private)
function out = f2(obj, in)
end
methods (Access = private, Static)
functions out = f3(obj, in)
end
end
所有内容都在MyClass.m
中,f2和f3是私有的,但显然可以看到类中的其他函数。我发现这有点问题,因为一些函数的名称略有相似(因为它们的作用相似,但不一样)并且可能误导维护代码的人 - 包括我以后的。
嵌套函数是我简单考虑过的另一个选项,但在那里我真的不喜欢我的用例的“共享参数”位(这是那些嵌套函数的重点),因为对我来说这听起来很容易引入错误。
我在这里错过了任何更好的解决方案,还是应该坚持当前的私人功能?
答案 0 :(得分:1)
一种解决方案如下:
classdef name
properties
...
end
methods
function out = f1(obj, in)
out = f2(obj, f3(in * obj.Thickness));
end
end
end
function out = f2(obj, in)
out = f3(in / obj.NumLayers);
end
function out = f3(in)
out = in;
end
这使得它们是class-private,但不是成员方法。我不确定这些私有函数是否可以访问该类的私有成员。
另一种方法是创建private member functions:
classdef name
properties
...
end
methods
function out = f1(obj, in)
out = f2(obj, f3(in * obj.Thickness));
end
end
methods (Access=private, Hidden=true)
function out = f2(obj, in)
out = f3(in / obj.NumLayers);
end
function out = f3(in)
out = in;
end
end
end