在MATLAB中从不同的脚本调用类的方法?

时间:2014-08-24 07:26:48

标签: matlab

我想从一个类调用一个方法。例如,我有:

classdef SweepLine
properties
    y;
    count;
    sections;
end

methods
    function obj = SweepLine(y)
        obj.y = y;
        obj.count = 0;            
    end

    function AddSection(obj, section)           
         obj.count = obj.count + 1;
         fprintf('%d\n', obj.count);
         fprintf('Indext is: %d\n', section.index);
         obj.sections(obj.count) = section;
    end
end
end

当我在不同的脚本中调用方法AddSection时,如下所示:

  AddSection(sweepLine, Sections(i)); % Sections contains 10 section objects

我收到了这个错误:

The following error occurred converting from Section to double:
Error using double
Conversion to double from Section is not possible.

Error in SweepLine/AddSection (line 20)
           obj.sections(obj.count) = section;

我想这是因为我没有进行内存预分配,但我仍然不确定。 我刚从Java转到MATLAB OOP,觉得有很多东西很难搞定。

非常感谢有关此问题和MATLAB编程的任何帮助!

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试将sections数组与新值连接起来。执行此操作时,您假设已经分配了obj.sections,并且通过执行该分配,您将收到该错误。因此,您怀疑的是正确的。要解决此问题,请尝试在您的AddSections方法中为您的课程执行此语句:

obj.sections = [obj.sections section];

这会将section与当前建立的obj.sections连接起来。这实质上将section添加到数组的末尾,这是您之前的代码正在执行的操作。这对于空数组和已分配的数组都是安全的。


我还建议您的SweepLine类继承自handle类。我假设当您致电AddSection时,希望退回该对象。你只想修改对象,什么也不返回......对吗?如果是这种情况,那么必须继承handle类。但是,如果在每次方法调用后返回对象的当前实例,则不需要这样做。

无论如何,你应该这样做:

classdef SweepLine < handle
properties
    y;
    count;
    sections;
end

methods
    function obj = SweepLine(y)
        obj.y = y;
        obj.count = 0;            
    end

    function AddSection(obj, section)           
         obj.count = obj.count + 1;
         fprintf('%d\n', obj.count);
         fprintf('Index is: %d\n', section.index);
         obj.sections = [obj.sections section];
    end
end
end