MATLAB类中不同函数间变量的调用方法咨询
在MATLAB静态方法间调用共享变量的实现方法
因为你使用的是静态方法(methods (Static)),这类方法不依赖类实例,无法直接访问其他静态方法的局部变量,可通过以下三种方式实现需求:
1. 直接调用静态方法获取输出
如果funk1需要用到funk的输出变量(比如你提到的g),可以在funk1内部直接调用funk,获取其返回值后使用。
修改后的类代码示例:
classdef ga_clas % The battery constraints properties %Property1 end methods (Static) function[a,b,c,d,g]=funk(f,h,i,j,k,l) % 将g加入输出列表,以便返回给调用方 g = zeros(1,24); % 先初始化g,避免未定义 for j=1:24 g(j)=f(j)+k(j); end end function [g_out, M, N]=funk1(t,y,u,i,f,k) % 调用静态方法funk,传入所需参数,用~忽略不需要的输出 [~,~,~,~,g] = ga_clas.funk(f, [], [], [], [], k, []); % 现在可在funk1中直接使用g变量 g_out = g; % 后续业务逻辑 M = ...; N = ...; end end end
注意:调用静态方法时需加上类名前缀(ga_clas.funk(...)),并保证传入参数的数量、类型与方法定义匹配。
2. 使用静态属性存储共享变量
如果多个静态方法需要反复复用同一个变量,可将其定义为静态属性(properties (Static)),所有静态方法都能直接读写该属性。
修改后的类代码示例:
classdef ga_clas % The battery constraints properties (Static) shared_g % 静态属性,用于存储共享的g变量 end methods (Static) function[a,b,c,d]=funk(f,h,i,j,k,l) ga_clas.shared_g = zeros(1,24); for j=1:24 ga_clas.shared_g(j)=f(j)+k(j); end end function [g, M, N]=funk1(t,y,u,i,f) % 直接访问静态属性中的shared_g g = ga_clas.shared_g; % 后续业务逻辑 M = ...; N = ...; end end end
注意:静态属性是全局共享的,需确保调用funk1前已通过funk初始化shared_g,避免变量未定义错误。
3. 通过主脚本传递变量
如果主脚本已经获取到funk的输出变量,可直接将该变量作为参数传入funk1,这是最直接的方式。
主脚本调用示例:
% 主脚本中初始化所需变量 f = ...; k = ...; t = ...; y = ...; % 调用funk获取g [a,b,c,d,g] = ga_clas.funk(f, [], [], [], [], k, []); % 将g作为参数传给funk1 [g_out, M, N] = ga_clas.funk1(t,y,u,i,f,g);
对应修改funk1的参数列表:
function [g, M, N]=funk1(t,y,u,i,f,g) % 直接使用传入的g变量 % 后续业务逻辑 end
内容的提问来源于stack exchange,提问作者Shane
相关产品推荐
相关产品推荐

