Как отобразить ошибку, включая содержимое массива ячеек - PullRequest
0 голосов
/ 24 января 2019

Я хочу отобразить каждый элемент массива ячеек в новой строке как часть сообщения об ошибке в Matlab.

classdef MyEnum < int32
    enumeration
         red (1) 
         blue (2) 
    end
end    

[m, s] = enumeration('MyEnum');
error('Expected one of the values below: %s', s);

Этот код не работал и возвратил следующую ошибку: «Функция не определена для входов« ячейки ».

Я хочу отобразить сообщение об ошибке, подобное этому.

 Expected one of the values below:
 'red'
 'blue'

1 Ответ

0 голосов
/ 24 января 2019

Если ячейки содержат только символьные векторы

Вы можете развернуть ячейку в список через запятую отдельных входов до error и динамически построитьспецификатор формата, повторяя '%s\n' соответствующее количество раз.Каждая строка заключена в одинарные кавычки.

s = {'aaa', 'bbbb'};
error(['Expected one of the values below:\n' repmat('''%s''\n', 1, numel(s))], s{:})

выдает сообщение об ошибке

Expected one of the values below:
'aaa'
'bbbb'

Если ячейки могут содержать символьные векторы или числовые матрицы

В этом случаевместо заключения в одинарные кавычки вы можете применить mat2str к содержимому каждой ячейки:

s = {'aaa', [1 2 3; 4 5 6]};
t = cellfun(@mat2str, s, 'UniformOutput', false);
error(['Expected one of the values below:\n' repmat('%s\n', 1, numel(t))], t{:})

дает

Expected one of the values below:
'aaa'
[1 2 3;4 5 6]
...