如何在 MATLAB 中实现单元阵列扩展作为函数调用?



我有以下单元格数组:

>> 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返回您的字符串。

function myStr = mySprintf(myCell)
formatSpec = strjoin(myCell(:,2), ',');
[A1, A2] = myCell{:, 3};
myStr = sprintf(formatSpec, A1, A2);
end 

最新更新