我有一个场景,其中我想评估以字符串形式给出的布尔表达式。如何评估在X ++中以字符串形式给出的布尔表达式[AX 2012]
例如, 传递给某个函数时,会将“1 == 4”评估为/返回FALSE。
同样, “1 == 1”传递给同一个函数时,将评估为TRUE。
如果可以这样做,那么我肯定会想要某种方式来评估动态布尔表达式。 例如, “workHours == 4”是字符串表达式,workHours是变量。
如果您知道,请告诉我任何解决方案。 谢谢。
我有一个场景,其中我想评估以字符串形式给出的布尔表达式。如何评估在X ++中以字符串形式给出的布尔表达式[AX 2012]
例如, 传递给某个函数时,会将“1 == 4”评估为/返回FALSE。
同样, “1 == 1”传递给同一个函数时,将评估为TRUE。
如果可以这样做,那么我肯定会想要某种方式来评估动态布尔表达式。 例如, “workHours == 4”是字符串表达式,workHours是变量。
如果您知道,请告诉我任何解决方案。 谢谢。
自我学习的答案:
下面的代码示例,你可以怎么做。
static void Job22(Args _args)
{
str expr = 'ab==2';
str method = @'boolean eval(int ab){return ' + expr + ';}';
boolean result;
;
result = runBuf(method, 5);
info (strfmt("Calculation result is %1", result));
}
有许多方法可以通过.NET(例如使用XLNT Framework)和通过X ++中的某些内在函数从文本中评估X ++表达式。但我敢肯定,你可以用更简洁的方法达到同样的解决方案。例如,你可以将一个容器传递给一个函数,然后比较它们的值,或者类似的东西。
如果您仍然想这样做,请看看X ++中的runbuf
函数。
这可能是一个更好的例子,您可以轻松更改expression
。
static void RunBufExample()
{
str expression = '2==1';
str func = 'boolean myFunc() {return ' + expression + ';}';
boolean retVal;
new ExecutePermission().assert();
retVal = runBuf(func);
CodeAccessPermission::revertAssert();
info(strFmt("%1", retVal));
}
@jan - 关于编辑,我只是修改了MSDN例子盲目。这就是为什么第二组代码总是有帮助的原因! –