MATLAB:从 parfor 调用超类的方法

Posted

技术标签:

【中文标题】MATLAB:从 parfor 调用超类的方法【英文标题】:MATLAB: Calling a superclass' method from parfor 【发布时间】:2013-01-10 09:01:58 【问题描述】:

让我们直接进入代码。有两个班。超类是

classdef Parent
  methods
    function this = Parent()
    end

    function say(this, message)
      fprintf('%s\n', message);
    end
  end
end

子类是

classdef Child < Parent
  methods
    function this = Child()
      this = this@Parent();
    end

    function say(this, message)
      for i = 1
        % This one works...
        say@Parent(this, message);
      end

      parfor i = 1
        % ... but this one does not.
        say@Parent(this, message);
      end
    end
  end
end

问题是:如何在不引入任何额外方法的情况下使 second 循环工作?至于现在,它会引发一个错误,说“只能从同名的子类方法中显式调用基类方法”。谢谢。

问候, 伊万

【问题讨论】:

【参考方案1】:

我认为您可能需要在调用parfor 循环之前将this 显式转换为Parent,然后显式调用Parent 方法say

this2 = Parent(this);
parfor i = 1:1
  say(this2, message);
end

为此,您需要修改Parent 的构造函数以接受输入参数:

function this = Parent(varargin)
    if nargin == 1
        this = Parent();
    end
end

如果ParentChild 具有属性,就像您的真实类可能那样,您将在if 语句之后包含一些代码,将Childs 属性分配给新构造的Parent 对象。

【讨论】:

以上是关于MATLAB:从 parfor 调用超类的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从别处调用 Objective-C 对象的超类的方法?

如何取消超类对默认 Matlab 函数的覆盖

Matlab在使用codegen和parfor时啥时候选择线程

MATLAB教程案例92基于parfor的matlab并行运行机制

MATLAB R2014b 中的 MATLAB Coder 和 parfor

高性能Matlab的并行计算之parfor