是否可以检测matlab函数以自动比较函数中局部变量的值?

时间:2013-03-22 07:32:43

标签: function matlab macros

这与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中的local1F1匹配,则返回local2在执行每个输入F2期间x y z

是否可以在Matlab中完成此操作,理想情况下无需修改原始功能? 我想与此相关的问题是函数是否是Matlab中的第一类对象,我试图谷歌但没找到。

1 个答案:

答案 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的整个想法)。