2

我有一個場景,其中我想評估以字符串形式給出的布爾表達式。如何評估在X ++中以字符串形式給出的布爾表達式[AX 2012]

例如, 傳遞給某個函數時,會將「1 == 4」評估爲/返回FALSE。

同樣, 「1 == 1」傳遞給同一個函數時,將評估爲TRUE。

如果可以這樣做,那麼我肯定會想要某種方式來評估動態布爾表達式。 例如, 「workHours == 4」是字符串表達式,workHours是變量。

如果您知道,請告訴我任何解決方案。 謝謝。

回答

2

自我學習的答案:

下面的代碼示例,你可以怎麼做。

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)); 

} 
2

有許多方法可以通過.NET(例如使用XLNT Framework)和通過X ++中的某些內在函數從文本中評估X ++表達式。但我敢肯定,你可以用更簡潔的方法達到同樣的解決方案。例如,你可以將一個容器傳遞給一個函數,然後比較它們的值,或者類似的東西。

如果您仍然想這樣做,請看看X ++中的runbuf函數。

http://msdn.microsoft.com/en-us/library/aa656300.aspx

2

這可能是一個更好的例子,您可以輕鬆更改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)); 
} 
+1

@jan - 關於編輯,我只是​​修改了MSDN例子盲目。這就是爲什麼第二組代碼總是有幫助的原因! –

相關問題