poster
2019-12-10, 16:49
是否可以从函数中获取“ nth”个返回值,而不必在此之前为所有n-1返回值创建哑变量?
假设我在MATLAB中具有以下功能:
function [a,b,c,d] = func() a = 1; b = 2; c = 3; d = 4; 现在假设,我只对第三个返回值感兴趣。这可以通过创建一个虚拟变量来实现:
[dummy, dummy, variableThatIWillUse, dummy] = func; clear dummy; 但是我认为这有点丑陋 。我认为您可能可以执行以下操作之一,但不能:
[_, _, variableThatIWillUse, _] = func;
[, , variableThatIWillUse, ] = func;
variableThatIWillUse = func(3);
variableThatIWillUse = func()(3);
是否有任何优雅的方式来做到这一点做的工作?
到目前为止,最好的解决方案是简单地将variableThatIWillUse用作虚拟变量。这使我不必创建一个真正的伪变量,该变量会污染工作空间(或者我需要清除)。简而言之:解决方案是对每个返回值使用variableThatIWillUse ThatIWillUse,直到有趣的为止。之后的返回值可以简单地忽略:
[variableThatIWillUse, variableThatIWillUse, variableThatIWillUse] = func; 我仍然认为这是非常丑陋的代码,但是如果没有更好的方法,那么我想我会接受答案。
回答:
这有点hack,但是可以用:
首先是一个简单的示例函数:
Func3 = @() deal(1,2,3); [a,b,c]=Func3(); % yields a=1, b=2, c=3 现在的关键是,如果您在多表达式分配的左侧使用了两次变量,则较早的分配将被较后的分配所破坏:
[b,b,c]=Func3(); % yields b=2, c=3 [c,c,c]=Func3(); % yields c=3 (编辑:只是为了检查,我还验证了如果您对polyfit关心的只是第三个参数,则该技术适用于[mu,mu,mu]=polyfit(x,y,n) )
编辑:有更好的方法;请参阅ManWithSleeve的答案 (https://stackoverflow.com/a/1404597/44330) 。
更多&回答... (https://stackoverflow.com/questions/747296)
假设我在MATLAB中具有以下功能:
function [a,b,c,d] = func() a = 1; b = 2; c = 3; d = 4; 现在假设,我只对第三个返回值感兴趣。这可以通过创建一个虚拟变量来实现:
[dummy, dummy, variableThatIWillUse, dummy] = func; clear dummy; 但是我认为这有点丑陋 。我认为您可能可以执行以下操作之一,但不能:
[_, _, variableThatIWillUse, _] = func;
[, , variableThatIWillUse, ] = func;
variableThatIWillUse = func(3);
variableThatIWillUse = func()(3);
是否有任何优雅的方式来做到这一点做的工作?
到目前为止,最好的解决方案是简单地将variableThatIWillUse用作虚拟变量。这使我不必创建一个真正的伪变量,该变量会污染工作空间(或者我需要清除)。简而言之:解决方案是对每个返回值使用variableThatIWillUse ThatIWillUse,直到有趣的为止。之后的返回值可以简单地忽略:
[variableThatIWillUse, variableThatIWillUse, variableThatIWillUse] = func; 我仍然认为这是非常丑陋的代码,但是如果没有更好的方法,那么我想我会接受答案。
回答:
这有点hack,但是可以用:
首先是一个简单的示例函数:
Func3 = @() deal(1,2,3); [a,b,c]=Func3(); % yields a=1, b=2, c=3 现在的关键是,如果您在多表达式分配的左侧使用了两次变量,则较早的分配将被较后的分配所破坏:
[b,b,c]=Func3(); % yields b=2, c=3 [c,c,c]=Func3(); % yields c=3 (编辑:只是为了检查,我还验证了如果您对polyfit关心的只是第三个参数,则该技术适用于[mu,mu,mu]=polyfit(x,y,n) )
编辑:有更好的方法;请参阅ManWithSleeve的答案 (https://stackoverflow.com/a/1404597/44330) 。
更多&回答... (https://stackoverflow.com/questions/747296)