MATLAB中如何通过函数调用实现元胞数组扩展并作为函数参数?
解决MATLAB中通过函数调用扩展元胞数组作为其他函数参数的问题
这个问题的核心在于MATLAB函数默认只能返回固定数量的输出,而你需要让函数返回可变数量的输出,来匹配sprintf这类需要多个输入参数的函数需求。
问题原因分析
你写的cellExp函数没有定义输出参数,单独调用时MATLAB会把cellIn{:}展开的所有值依次显示为ans,但当把它作为sprintf的参数时,sprintf期望接收多个输入,此时MATLAB会尝试从cellExp获取多个输出,但原函数没有定义输出参数,因此触发"Too many output arguments"错误。
解决方案:使用varargout实现可变输出
修改cellExp函数,利用MATLAB的varargout(可变输出参数列表)来返回元胞数组展开后的所有元素:
function varargout = cellExp(cellIn) % 将元胞数组展开为逗号分隔列表,赋值给可变输出参数 [varargout{:}] = cellIn{:}; end
验证效果
现在用修改后的函数测试:
tmp0 = {'foo', '%s', 'one'; 'bar', '%d', 3}; sprintf('%s,%d', cellExp(tmp0(:,3)))
执行后会得到预期结果:
ans = 'one,3'
原理说明
varargout是一个元胞数组,用于存储函数的可变数量输出。[varargout{:}] = cellIn{:}会把cellIn{:}展开的逗号分隔列表,依次赋值给varargout的每个元素,这样函数就能返回和元胞数组元素数量一致的输出,完美匹配sprintf的多参数需求。
内容的提问来源于stack exchange,提问作者bbarker
相关产品推荐
相关产品推荐

