我有一個場景,其中我想評估以字符串形式給出的布爾表達式。如何評估在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例子盲目。這就是爲什麼第二組代碼總是有幫助的原因! –