是否可以在MATLAB对象之间共享数据,例如查找表?
我在MATLAB中编写了一个handle类,其中我通过是否可以在MATLAB对象之间共享数据,例如查找表?,matlab,oop,Matlab,Oop,我在MATLAB中编写了一个handle类,其中我通过函数obj=mtimes(a,b)重载“*”操作符,其中a和b应该是该类中的对象。我的问题如下。在函数mtimes中,我需要访问一些“外部”数据,特别是我在代码开始时计算的查找表(LUT),因此该LUT应该以某种方式对该类中的所有对象可用。当然,我可以在类定义中创建一个属性,并用该LUT初始化每个对象,但这是不切实际的,因为表非常大,会复制到每个对象?我一般不太熟悉OOP,因此非常感谢您对如何解决此问题提出的任何建议。谢谢 如果您是说所有对象
函数obj=mtimes(a,b)
重载“*”操作符,其中a
和b
应该是该类中的对象。我的问题如下。在函数mtimes
中,我需要访问一些“外部”数据,特别是我在代码开始时计算的查找表(LUT),因此该LUT应该以某种方式对该类中的所有对象可用。当然,我可以在类定义中创建一个属性,并用该LUT初始化每个对象,但这是不切实际的,因为表非常大,会复制到每个对象?我一般不太熟悉OOP,因此非常感谢您对如何解决此问题提出的任何建议。谢谢 如果您是说所有对象都使用一个通用的、不变的LUT,那么可以将其设置为常量属性。这样,它将仅在第一次引用类时计算。您还可以在构造函数中使LUT成为持久变量,如下所示。这将为您提供更改对象构造表的灵活性。但是,在更改表之前,应小心发出清除类
classdef myclass < handle
properties
LUT
end
methods
function obj=myclass(newtable)
persistent LUT
if isempty(LUT) && nargin
LUT=newtable;
elseif nargin
warning 'Clear all previous objects'
LUT=newtable;
end
obj.LUT=LUT;
end
end
end
classdef myclass
我想你指的是“*”运算符,不是“+”运算符。对不起,我弄错了。应该是“*”。我认为OP可能使用“copy”来引用类的每个实例对象。你是说,如果一个人创建了一个类的多个实例,每个实例都有一个常量属性,那么只有一个版本的数据会驻留在内存中的某个位置?@horchler是的。常量属性在这个词的最完整意义上是“常量”。您甚至不需要类的实例来访问它们,只需要类名称,ClassName.PropertyName
谢谢。这里可以找到有关的一些详细信息。@Matt:下面是一个小问题。在properties(constant)
块中,如何调用属于该类的方法?我可以通过classname.variablename
引用其他常量,但是classname.functionname()
不起作用。如果方法是静态的,可以调用类方法来实例化常量属性。