我正在尝试使用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);
那我该如何解决这个问题?
答案 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
这告诉运行时在哪里可以找到函数定义。