Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在MATLAB对象之间共享数据,例如查找表?_Matlab_Oop - Fatal编程技术网

是否可以在MATLAB对象之间共享数据,例如查找表?

是否可以在MATLAB对象之间共享数据,例如查找表?,matlab,oop,Matlab,Oop,我在MATLAB中编写了一个handle类,其中我通过函数obj=mtimes(a,b)重载“*”操作符,其中a和b应该是该类中的对象。我的问题如下。在函数mtimes中,我需要访问一些“外部”数据,特别是我在代码开始时计算的查找表(LUT),因此该LUT应该以某种方式对该类中的所有对象可用。当然,我可以在类定义中创建一个属性,并用该LUT初始化每个对象,但这是不切实际的,因为表非常大,会复制到每个对象?我一般不太熟悉OOP,因此非常感谢您对如何解决此问题提出的任何建议。谢谢 如果您是说所有对象

我在MATLAB中编写了一个handle类,其中我通过
函数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()
不起作用。如果方法是静态的,可以调用类方法来实例化常量属性。