Как вызвать метод статического класса из другого метода того же класса? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь работать с Octave и не могу найти, как запустить некоторые сценарии, которые используют функции файла, последнее, что я пытался создать класс, но безуспешно.Проблема в том, что некоторые функции имеют внутри чужие функции.Например:

classdef ALLFUNCS
   methods(Static)
      function result = SumElements(a,b,c)
          result = a + b + c;
      end
      function [prod,div] = MultiplyDivide(v1,v2,v3)
          prod = v1 * v2 * v3;
          div  = v1 / v2 / v3;
      end
      function resulta = powelents(a,b,c)
        pas = SumElements(a,b,c);
        resulta = pas*pas;
      end 
   end
end

В командной строке я поставил

s2 = ALLFUNCS.powelents(3,4,5);

Ошибка:

error: 'SumElements' undefined near line 11 column 19
error: called from
powelents at line 11 column 17

Так как я могу решить эту проблему?

1 Ответ

0 голосов
/ 13 декабря 2018

Функции, объявленные в блоке методов, связаны с их определяющим классом (если статический) или с экземплярами определяющего класса (если не статический).Они не имеют типичных правил области видимости локальной функции, как в других контекстах.

Следовательно, следующая строка в реализации powelents

pas = SumElements(a,b,c);

не знает *Метод 1007 * (лексически) определен выше powelents, поэтому Octave и MATLAB будут искать SumElements в пути поиска в глобальном пространстве имен и не найдут его.

Решение состоит в том, чтобы вызвать метод с использованиемсам класс

function resulta = powelents(a,b,c)
    pas = ALLFUNCS.SumElements(a,b,c);
    resulta = pas*pas;
end 

Это сообщает среде выполнения, где найти определение функции.

...