rob*_*nce 18 string matlab multiline literals
Matlab中是否存在多行字符串文字语法,或者是否需要连接多行?
我找到了逐字包,但它只能在m文件或函数中工作,而不能在编辑器单元中交互.
编辑:我特别是在可读性和易于修改代码中的文字后(想象它包含不同级别的缩进块) - 很容易制作多行字符串,但我正在寻找最方便的sytax来做到这一点.
到目前为止我有
t = {...
'abc'...
'def'};
t = cellfun(@(x) [x sprintf('\n')],t,'Unif',false);
t = horzcat(t{:});
Run Code Online (Sandbox Code Playgroud)
这给出了size(t)= 1 8,但显然有点混乱.
编辑2:基本上verbatim做我想要的,除了它在编辑器单元格中不起作用,但也许我最好的选择就是更新它.我认为应该可以从java界面到编辑器获取当前打开的文件和光标位置.问题是如果在同一个单元格中有多个逐字调用,您将如何区分它们.
edg*_*eis 13
我会去:
multiline = sprintf([ ...
'Line 1\n'...
'Line 2\n'...
]);
Run Code Online (Sandbox Code Playgroud)
Matlab是一个古怪的东西,字符串中的转义处理是函数printf族的函数,而不是字符串文字语法.而且没有多行文字.那好吧.
我最终做了两件事.首先,make CR()和LF()函数分别只返回已处理的\ r和\n,因此您可以在代码中将它们用作伪文字.我更喜欢这样做而不是通过sprintf()发送整个字符串,因为在那里你可能还有其他反斜杠你不想作为转义序列处理(例如,如果你的一些字符串来自函数参数或从其他地方读取输入).
function out = CR()
out = char(13); % # sprintf('\r')
function out = LF()
out = char(10); % # sprintf('\n');
Run Code Online (Sandbox Code Playgroud)
其次,join(glue, strs)在你的例子中创建一个像Perl的join或cellfun/horzcat代码一样的函数,但没有最终的尾随分隔符.
function out = join(glue, strs)
strs = strs(:)';
strs(2,:) = {glue};
strs = strs(:)';
strs(end) = [];
out = cat(2, strs{:});
Run Code Online (Sandbox Code Playgroud)
然后像你一样使用它与单元格文字.
str = join(LF, {
'abc'
'defghi'
'jklm'
});
Run Code Online (Sandbox Code Playgroud)
你不需要像这样的单元格文字中的"..."省略号; 省略它们会做一个垂直向量构造,如果行具有不同长度的char字符串就好了,因为它们都被卡在单元格内.仅此一项就可以节省一些打字费用.