多个命令合二为一,Matlab

jka*_*zan 1 matlab function-calls function-call function-composition

有时需要在一个命令中进行多次调用.一个简单的例子可能是strrep.假设您要用括号替换所有括号,所有逗号用点替换,然后删除所有双引号.然后可能需要以下伪代码:

strrep(myString, '()', '[]', ',', '.', '"', '')
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?你当然可以选择:

strrep(strrep(strrep(myString, '()', '[]'), ',', '.'), '"', '')
Run Code Online (Sandbox Code Playgroud)

或者将字符串保存在单元格数组中并在for循环中使用它,但这两种解决方案都非常难看.

最理想的答案是对所有以类似方式工作的函数都是通用的.

Sue*_*ver 5

要直接回答你的问题,实际上没有一致的方法可以做到这一点,不.这真的取决于功能.如果您搜索文档,您通常会找到一种方法来执行此操作.至少使用字符串,您通常可以传递单元数组来代替字符串来对多个字符串执行操作,在这种情况下,对同一个字符串执行多个操作.

这个特定例子的解决方案

您可以轻松地regexprep为您执行此操作.您可以传递表达式的单元格数组以匹配替换值的相应单元格数组.

regexprep('abc', {'a', 'b', 'c'}, {'1', '2', '3'});

%// '123'
Run Code Online (Sandbox Code Playgroud)

对于您的具体示例,您可以执行以下操作:

regexprep(myString, {'\(\)', ',', '"'}, {'[]', '.', ''})
Run Code Online (Sandbox Code Playgroud)

作为一个例子:

myString = 'This, is a () "string"';
regexprep(myString, {'\(\)', ',', '"'}, {'[]', '.', ''})

%// 'This. is a [] string'
Run Code Online (Sandbox Code Playgroud)

如果您不想担心将所有表达式转义为正则表达式兼容,您可以使用它regexptranslate来为您执行此操作.

expressions = regexptranslate('escape', {'()', ',', '"'});
regexprep(myString, expressions, {'[]', '.', ''});
Run Code Online (Sandbox Code Playgroud)