OOP中的Matlab私有/嵌套函数

时间:2018-06-08 12:58:21

标签: matlab oop

我有一个具有多个子函数的函数,一切都是句柄类的一部分。这可以通过以下说明(私有函数没有循环依赖,一些东西依赖于对象):

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是私有的,但显然可以看到类中的其他函数。我发现这有点问题,因为一些函数的名称略有相似(因为它们的作用相似,但不一样)并且可能误导维护代码的人 - 包括我以后的。

嵌套函数是我简单考虑过的另一个选项,但在那里我真的不喜欢我的用例的“共享参数”位(这是那些嵌套函数的重点),因为对我来说这听起来很容易引入错误。

我在这里错过了任何更好的解决方案,还是应该坚持当前的私人功能?

1 个答案:

答案 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