0

我尝试通过简单的表达式使用 JInt(.NET 的 Javascript 解释器):

var engineTest = new Engine ()
    .SetValue ("X", 10.1)
    .SetValue ("Y", 20.5)
    .SetValue ("Code", "A");
    var dFormula = @"if (Code === 'A'){X+Y;} if (Code === 'B'){Y-X;}";
var result = engineTest.Execute(dFormula).GetCompletionValue();

对于这个公式结果将是“ undefined”。如果我dFormula改为

var dFormula = @"if (Code === 'A'){X+Y;}";

或者

var dFormula = @"if (Code === 'A'){X+Y;} else if (Code === 'B'){Y-X;}";

结果将是正确的。JInt (2.5.0) 有什么问题。或者它可能不支持公式中的多个语句?我试图用“ {}”括号包裹公式,但没有结果。

4

2 回答 2

0

为什么不使用返回:

if (Code === 'A') return X+Y;
if (Code === 'B') return Y-X;

或者

return Code === 'A' ? X+Y : (Code === 'B' ? Y-X : undefined);

或使用开关

switch (Code) {
    case a:
...
于 2015-08-24T11:49:20.797 回答
0

原因是:在执行每条语句之前,JInt 会重置 Complition 值。因此,此公式仅在 Code === "B" 时才有效,否则结果将被 'undefined' 值覆盖。

有两种方法可以修复它:

  1. 合并为单个语句(使用 else)。
  2. 添加到公式输出变量,如

    var dFormula = @"if (Code === 'A'){RESULT = X+Y;} if (Code === 'B'){RESULT = YX;}";

于 2015-08-22T06:01:50.790 回答