如何在MATLAB中以函数调用的形式实现单元阵列扩展?
我有以下单元格数组:如何在MATLAB中以函数调用的形式实现单元阵列扩展?,matlab,cell-array,Matlab,Cell Array,我有以下单元格数组: >> tmp0 = {'foo', '%s', 'one'; 'bar', '%d', 3} tmp0 = 2×3 cell array 'foo' '%s' 'one' 'bar' '%d' [ 3] 我可以像这样使用sprintf >> sprintf('%s,%d', tmp0{:,3}) ans = 'one,3' 我希望能够通过函数调用实现同样的功能,因为如果我有一个生成单
>> tmp0 = {'foo', '%s', 'one'; 'bar', '%d', 3}
tmp0 =
2×3 cell array
'foo' '%s' 'one'
'bar' '%d' [ 3]
我可以像这样使用sprintf
>> sprintf('%s,%d', tmp0{:,3})
ans =
'one,3'
我希望能够通过函数调用实现同样的功能,因为如果我有一个生成单元数组的函数,比如说genCell()
,我认为我无法在MATLAB中实现类似genCell(){:}
所以我做了这个函数:
function cellExp(cellIn)
cellIn{:}
end
尽管有点可疑,但到目前为止,它似乎能像预期的那样工作,因为调用cellExp(tmp0(:,3))
似乎与调用tmp0{:,3}
>> cellExp(tmp0(:,3))
ans =
'one'
ans =
3
>> tmp0{:,3}
ans =
'one'
ans =
3
但是,最终,我无法按预期使用它:
>> sprintf('%s,%d', cellExp(tmp(:,3)))
Error using cellExp
Too many output arguments.
您收到的最后一条错误消息是因为cellExp(tmp0(:,3))
的输出不正确
我不确定您到底在这里寻找什么,但我认为这是一个函数的一种可能性,该函数将基于myCell=tmp0
返回您的字符串
函数myStr=mySprintf(myCell)
formatSpec=strjoin(myCell(:,2),',');
[A1,A2]=myCell{,3};
myStr=sprintf(formatSpec,A1,A2);
结束
我认为这是行不通的。您需要将一组参数传递给sprintf
,但函数无法返回该参数。即使您的函数使用了,您仍然必须显式地获取它们(即,它不只是将它们全部作为逗号分隔的列表转储)。我认为在这里使用临时变量不是一个很好的方法。否,cellExp
没有输出。它向控制台显示其输入,但不定义任何输出参数。