如何从同一个类的另一个方法调用静态类方法?

时间:2018-12-13 01:10:35

标签: matlab octave

我正在尝试使用Octave,但找不到如何运行使用文件功能的脚本,我最后尝试的事情是创建一个类,但没有成功。问题是某些函数在另一个函数内部具有。例如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

在命令行中输入

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);

那我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

在Methods Block中声明的函数绑定到其定义类(如果是静态的)或定义类的实例(如果不是静态的)。它们没有其他情况下的典型本地函数作用域规则。

因此,powelents实施中的以下行

pas = SumElements(a,b,c);

不了解SumElements上定义的powelents方法(按词法),因此Octave和MATLAB将在全局名称空间的搜索路径中寻找SumElements,但找不到一个。

解决方案是使用类本身来调用方法

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

这告诉运行时在哪里可以找到函数定义。