Вывод функции класса в Matlab

Я давно работаю с классами, но пока не могу понять, как ВЫВОДИТЬ из функции/конструктора, подобной функции. Я видел несколько примеров, но не мог прояснить суть. Здесь у меня есть простой пример myFunc вывода массива и той же функции в классе, как вывести из класса как функцию. Как получить вывод из любой функции класса, как функцию?

моя функция:

function M=myFunc(n)
[M]=[];
i=0;
for ii=1:n
    M(ii)=i;
    %% Counter
    i=i+4;
end
end

Мой класс:

    classdef myClass
        properties (Access=private)
            n
            M
            i
        end
        methods
            function obj = myClass(n)
                obj.n = n;
            end
            function myFunc(obj)

                for ii=1:obj.n
                    obj.M(ii)=obj.i;
                    %% Counter
                    obj.i=obj.i+4;
                end
            end
        end
    end

**EDIT 1:**
classdef myClass
    properties (Access=private)
        n
        M
        i
    end
    methods
        function obj = myClass(n)
            obj.n = n;
        end


    function M = myFunc(obj)

            for ii=1:obj.n
                obj.M(ii)=obj.i;
                %% Counter
                obj.i=obj.i+4;
            end
            M = obj.M;
    end
    end
end

person Community    schedule 23.05.2014    source источник
comment
Не могли бы вы добавить небольшой пример с входными данными, вызовом и ожидаемым результатом?   -  person Dennis Jaheruddin    schedule 23.05.2014
comment
Я уже ввел и вывел, в классе n вводится, а M выводится   -  person    schedule 23.05.2014
comment
Вы хотите, чтобы метод MyFunc для вашего класса выводил результат, как Myfunc вверху? Если это так, в classdef нет вывода, попробуйте изменить на function obj = myFunc(obj)   -  person RTL    schedule 23.05.2014
comment
и как получить к этому доступ? @RTL, пожалуйста, очисти меня.   -  person    schedule 23.05.2014
comment
не для приведенного выше вывода obj.M больше похож на то, что вы можете захотеть, но я не думаю, что это невозможно сделать напрямую, потребуется скопировать obj.M в переменную для вывода (поскольку вы не можете вывести поле структуры как Переменная   -  person RTL    schedule 23.05.2014
comment
Хорошо, допустим, я скопировал obj.M в J, как теперь вызвать ?   -  person    schedule 23.05.2014


Ответы (1)


Метод работает так же, как обычная функция, за исключением того, что первым входом нестатического метода всегда ожидается экземпляр класса.

Вы вызываете метод, определенный как

methods
   function [out1, out2] = fcnName(object, in1, in2)
      % do stuff here (assign outputs!)
   end
end

вот так:

[out1, out2] = object.fcnName(in1,in2)

or

[out1, out2] = fcnName(object,in1,in2)

Применительно к вашему примеру:

methods
    function M = myFunc(obj)

            for ii=1:obj.n
                obj.M(ii)=obj.i;
                %% Counter
                obj.i=obj.i+4;
            end
            M = obj.M;
     end
 end

вы называете myFunc как

 obj = myClass(3);
 M = myFunc(obj);
person Jonas    schedule 23.05.2014
comment
Я не очень хорошо это понял. Не могли бы вы повторно использовать мой код в качестве примера? - person ; 23.05.2014
comment
@AhsanAli: я добавил вашу функцию в ответ. Обратите внимание, что вы также можете либо вернуть измененный объект (который содержит M как свойство), либо превратить класс в класс значений, чтобы объект автоматически изменялся в рабочей области по мере его изменения в методе. - person Jonas; 23.05.2014
comment
пожалуйста, проверьте мой отредактированный пост в соответствии с вашим кодом, мотыга, которую я называю myFunc? - person ; 23.05.2014
comment
Undefined function or variable 'obj'. выдает ошибку, я это уже пробовал. - person ; 23.05.2014
comment
@AhsanAli: сначала вам нужно определить экземпляр класса. Смотрите мою правку. - person Jonas; 28.05.2014