gpt4 book ai didi

matlab - 在调试器中评估具有多个返回值的函数

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:50 24 4
gpt4 key购买 nike

假设我有一些返回多个值的函数 foo(不是我写的),像这样:

function [one, two, three, four] = foo()
one = 2;
two = 4;
three = 8;
four = 16;
end

(注意:以上只是一个例子;一般来说,我无法控制函数 foo。)

此外,假设我正在进行 MATLAB 调试 session 。

如果我现在计算 foo,则只会显示它返回的第一个值:

K>> foo()
ans =
2

如果我尝试使用赋值表达式捕获所有值,我会得到一个或另一个错误;例如:

K>> all_returned_values = foo()
Attempt to add "all_returned_values" to a static workspace.
See Variables in Nested and Anonymous Functions.

K>> [v1 v2 v3 v4] = foo()
Attempt to add "v1" to a static workspace.
See Variables in Nested and Anonymous Functions.

K>> {v1 v2 v3 v4} = foo()
{v1 v2 v3 v4} = foo()

Error: The expression to the left of the equals sign is not a valid target for an assignment.

有没有办法强制 MATLAB 返回依赖赋值的函数的所有值?

注意:我正在寻找一种不需要以任何方式修改函数 foo 的解决方案。 (这个函数可能不在我的控制之下;例如,它可能是一个内置的 MATLAB 函数。)

最佳答案

您始终可以将 ans 添加到静态工作区,这样您就可以执行类似这样的操作来获取所有输出值。

% Force ans to be a cell first
ans = cell();

% Assign all outputs to elements in ans
[ans{1:4}] = foo()

这会强制 ans 成为元胞数组,其中前四个条目将填充 foo 的输出。 ans{1:4} 创建一个以逗号分隔的列表,它将自动扩展为四个输出参数。

访问生成的元胞数组时要小心,因为事物会自动分配给 ans

disp(ans{1})  % rather than ans{1} with no semicolon

% Alternately
celldisp(ans)

如果您希望它更灵活,您可以使用 nargout 来动态确定输出参数的数量。

[ans{1:nargout('foo')}] = foo();

关于matlab - 在调试器中评估具有多个返回值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38190198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com