这与How to retrieve local variables?有关,但范围更广。
场景看起来像这样。假设我有两个函数
function [OutA OutB OutC] = F1 (x,y,z)
local1 = x + y - z %some arbitrary computation
local2 = x - y + z %other computation
end
function [OutA OutB OutC] = F2 (x,y,z)
local1 = x+ y %some computation
local2 = x - y %other computation
end
我想编写一个以F1 F2 x y z "local1" "local2"
作为输入的函数,如果1
中的local1
与F1
匹配,则返回local2
在执行每个输入F2
期间x y z
。
是否可以在Matlab中完成此操作,理想情况下无需修改原始功能? 我想与此相关的问题是函数是否是Matlab中的第一类对象,我试图谷歌但没找到。
答案 0 :(得分:1)
因为函数的内部变量是私有的(除非你将它们设置为全局变量或返回变量),所以如果不改变函数或将它们放在更大的函数中,这是不可能的。
正确的方法是将它们设置为返回变量(因为你如何使用它们那些局部变量 实际上按照定义返回变量):
function retval = compareLocals(x,y,z)
[~, ~, ~, local1a, ~] = F1 (x,y,z);
[~, ~, ~, ~, local2b] = F2 (x,y,z);
retval = double(local1a=local2b);
end
function [OutA, OutB, OutC, local1, local2] = F1 (x,y,z)
local1 = x + y - z %some arbitrary computation
local2 = x - y + z %other computation
end
function [OutA, OutB, OutC, local1, local2] = F2 (x,y,z)
local1 = x+ y %some computation
local2 = x - y %other computation
end
或者嵌套函数也是一个选项(但已经是hack-ish imo):
function retval = compareLocals(x,y,z)
F1 (x,y,z);
F2 (x,y,z);
retval = double(local1a=local2b);
function [OutA OutB OutC] = F1 (x,y,z)
local1a = x + y - z %some arbitrary computation
local2a = x - y + z %other computation
end
function [OutA OutB OutC] = F2 (x,y,z)
local1b = x+ y %some computation
local2b = x - y %other computation
end
end
并且为此目的使用全局变量似乎是错误的(但是再一次,global variables is usually bad practice的整个想法)。