为了账号安全,请及时绑定邮箱和手机立即绑定

如何优雅地忽略MATLAB函数的某些返回值?

如何优雅地忽略MATLAB函数的某些返回值?

GCT1015 2019-10-18 10:33:58
是否可以从函数中获取“ 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对每个返回值使用直到有趣的值。之后的返回值可以简单地忽略:[variableThatIWillUse, variableThatIWillUse, variableThatIWillUse] = func;我仍然认为这是非常丑陋的代码,但是如果没有更好的方法,那么我想我会接受答案。
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

这有点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

(编辑:只是为了检查,[mu,mu,mu]=polyfit(x,y,n)如果您只关心polyfit第三个参数,我还验证了该技术是否适用)


查看完整回答
反对 回复 2019-10-18
?
守候你守候我

TA贡献1802条经验 获得超10个赞

使用MATLAB版本7.9(R2009b),您可以使用〜,例如,


[~, ~, variableThatIWillUse] = myFunction();

请注意,,不是可选的。仅输入[~ ~ var]将不起作用,并且会引发错误。



查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 2247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信