String 在matlab中用运算符和宏替换字符串
我有两个变量String 在matlab中用运算符和宏替换字符串,string,matlab,macros,replace,String,Matlab,Macros,Replace,我有两个变量a和b 我想从用户那里得到一个要形成的函数 str='operator' 它可以是“,”| |“,”&&等等。 我使用了enum和switch-case 尽管它可以工作,但对于许多函数来说,这种解决方案一点也不优雅 有没有一种方法可以计算字符串并使用其中的内容?类似宏的东西? 示例:str='='=' 估值(a str b)==>执行a==b 我在matlab中查找有关宏的信息,但找不到明确的答案。因此,解释一下存在什么以及如何使用它可能很好(链接也很好) 我会使用地图: oper
a
和b
我想从用户那里得到一个要形成的函数
str='operator'
它可以是“
,”| |“
,”&&
等等。我使用了
enum
和switch
-case
尽管它可以工作,但对于许多函数来说,这种解决方案一点也不优雅 有没有一种方法可以计算字符串并使用其中的内容?类似宏的东西? 示例:
str='='='
估值(a str b)
==>执行a==b
我在matlab中查找有关宏的信息,但找不到明确的答案。因此,解释一下存在什么以及如何使用它可能很好(链接也很好) 我会使用地图:
operators={'+',@plus;'-',@minus;'==',@eq};
mapObj = containers.Map(operators(:,1),operators(:,2));
如果您不知道操作员(++
)在doc+
要使用它,请从映射中获取函数句柄:
f=mapObj('+')
并对其进行评估:
f(a,b)
您可以使用
eval
:
a = 1;
b = 3;
st = '>'; %Take from user
stWithOp = ['a' st 'b' ];
eval(stWithOp);
但是,请注意,从用户处获取字符串可能会允许用户注入恶意代码。例如,用户可以输入:
%DO NOT TRY THIS AT HOME!
st = '; rmdir(''C:\'') ';
谢谢我要试试。有没有办法识别恶意输入?我想在这种情况下,我可以检查输入长度是否不超过1。但通常?
==
的长度为2,因此您必须至少允许此长度。根据您放置空格的位置,;f
将调用带有参数'b'
的f
,或者+5
将在b
中添加一个前导数字。