Как я могу добиться расширения массива ячеек в качестве вызова функции в MATLAB? - PullRequest
2 голосов
/ 19 сентября 2019

У меня есть следующий массив ячеек:

>> 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(), я не думаю, что смогу достичь чего-то вроде genCell(){:} в MATLAB.

Итак, я сделал эту функцию:

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.

1 Ответ

1 голос
/ 19 сентября 2019

Последнее сообщение об ошибке вы получаете, потому что вывод cellExp(tmp0(:,3)) является список с разделителями-запятыми .

Я не уверен, что именно вы ищете здесь, но ядумаю, что это одна из возможностей для функции, которая будет возвращать вашу строку на основе myCell = tmp0.

function myStr = mySprintf(myCell)

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

end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...