1

这与如何检索局部变量有关?,但范围更广。

场景看起来像这样。假设我有两个功能

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如果在每个 with inputs 执行期间in与local1inF1匹配,则返回。local2F2x y z

是否有可能在 Matlab 中做到这一点,理想情况下不修改原始函数?我想与此相关的是函数是否是 Matlab 中的一流对象的问题,我试图谷歌但没有找到。

4

1 回答 1

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

并且为此目的使用全局变量似乎是错误的(但话说回来,全局变量的整个想法通常是不好的做法)。

于 2013-03-22T08:26:47.730 回答