在 Matlab 中,我想对类的私有成员执行一些操作。我也想在其他课程上执行完全相同的任务。显而易见的解决方案是在一个单独的 M 文件中编写一个函数,所有类都调用该函数来执行此任务。然而,这在 Matlab 中似乎是不可能的(见下文)。还有另一种方法可以做到这一点吗?
这是具体的问题:假设我有一个包含内容的 m 文件
classdef PrivateTest
properties (Access=private)
a
end
methods
function this = directWrite(this, v)
this.a = v;
end
function this = sameFileWrite(this, v)
this = writePrivate(this, v);
end
function this = otherFileWrite(this, v)
this = otherFileWritePrivate(this, v);
end
function print(this)
disp(this.a);
end
end
end
function this = writePrivate(this, v)
this.a = v;
end
...以及另一个包含内容的 m 文件
function this = otherFileWritePrivate(this, v)
this.a = v;
end
实例化后p = PrivateTest
,这两个命令都可以正常工作(如预期的那样):
p = p.directWrite(1);
p = p.sameFileWrite(2);
...但是即使它是相同的代码,这个命令也不起作用,只是在不同的 m 文件中:
p = p.otherFileWrite(3);
因此,似乎任何对类的私有属性执行操作的代码都必须与定义这些私有属性的 classdef 位于同一个 m 文件中。另一种可能性可能是让所有类都继承一个具有写入方法的类,但 Matlab 也不允许这样做。在一个 m 文件中,我会有以下代码:
classdef WriteableA
methods
function this = inheritWrite(this, v)
this.a = v;
end
end
end
...在另一个 m 文件中,我将拥有以下代码:
classdef PrivateTestInherit < WriteableA
properties (Access=private)
a
end
end
但是,在实例化之后p = PrivateTestInherit;
,该命令p.inheritWrite(4)
会导致与之前相同的错误消息:“不允许设置 'PrivateTestInherit' 类的 'a' 属性。”
鉴于此,如何在 Matlab 中泛化操纵私有属性的代码,或者有可能吗?