Многострочный строковый литерал в Matlab?
существует ли многострочный строковый литеральный синтаксис в Matlab или необходимо объединить несколько строк?
нашел дословно пакет, но он работает только в m-файле или функции, а не интерактивно в ячейках редактора.
EDIT: я особенно после удобочитаемости и легкости изменения литерала в коде (представьте, что он содержит отступы блоков разных уровней) - легко сделать многострочные строки, но я ищу наиболее удобный sytax для этого.
пока у меня есть
t = {...
'abc'...
'def'};
t = cellfun(@(x) [x sprintf('n')],t,'Unif',false);
t = horzcat(t{:});
который дает размер (t) = 1 8, но, очевидно, немного беспорядок.
EDIT 2: в основном verbatim
делает то, что я хочу, за исключением того, что он не работает в ячейках редактора, но, возможно, мой лучший выбор-обновить его. Я думаю, что должно быть возможно получить текущий открытый файл и позицию курсора из интерфейса java в Редактор. Проблема была бы, если бы в одной ячейке было несколько дословных вызовов, как не могли бы вы различить их?
2 ответов
Matlab является странным в том, что обработка escape в строках является функцией printf
семейство функций вместо синтаксиса строкового литерала. И никаких многострочных литералов. Ну что ж.
в итоге я сделал две вещи. Во-первых, сделайте CR()
и LF()
функции, которые просто возвращают обработанные \r и \n соответственно, поэтому вы можете использовать их как псевдо-литералы в своем коде. Я предпочитаю делать это, а не отправлять целые строки через sprintf(), потому что могут быть другие обратные косые черты там вы не хотели обрабатывать как escape-последовательности (например, если некоторые из ваших строк пришли из аргументов функции или ввода, прочитанного из другого места).
function out = CR()
out = char(13); % # sprintf('\r')
function out = LF()
out = char(10); % # sprintf('\n');
во-вторых, сделать join(glue, strs)
функция, которая работает как соединение Perl или код cellfun / horzcat в вашем примере, но без конечного разделителя.
function out = join(glue, strs)
strs = strs(:)';
strs(2,:) = {glue};
strs = strs(:)';
strs(end) = [];
out = cat(2, strs{:});
а затем используйте его с литералами ячеек, как вы это делаете.
str = join(LF, {
'abc'
'defghi'
'jklm'
});
вам не нужно "..."эллипсы в клеточных литералах, как это; опущение их делает вертикальную векторную конструкцию, и это нормально, если строки имеют разную длину строк символов, потому что они застревают внутри ячейки. Уже одно это сэкономит вам время.