0

我试图在我的 NVelocity 模板中设置一个否定文字,但它不会解析。做这项工作有诀窍吗?

数有效:
#set($age = 27)

负数不起作用:
#set($age = -27)
#set($age = 27*-1)

词法错误:NVelocity.Runtime.Parser.TokenMgrError:第 62 行第 15 列的词法错误。遇到:“-”

我使用的是 Castle.NVelocity(dll-AssemblyVersion 1.1.1.0,FileVersion=1.1.1.60),而不是旧的 Apache 版本

4

1 回答 1

0

您能否提供一个失败的单元测试,因为负面文字对我有用。我使用了我们的 NVelocity 源存储库的HEAD,但是我不知道自 1.1.1 发布以来该区域的任何更改。如果我的单元测试在该构建中对您失败,如果您愿意,我可以查看何时修复。

[Test]
public void NegativeLiterals()
{
    Assert.AreEqual("-27", Eval("#set($result = -27)\r\n$result"));
    Assert.AreEqual("-27", Eval("#set($result = 27 * -1)\r\n$result"));
    Assert.AreEqual("-27", Eval("#set($result = 27*-1)\r\n$result"));
    Assert.AreEqual("27", Eval("#set($result = -27*-1)\r\n$result"));
}

private string Eval(string template)
{
    VelocityEngine velocityEngine = new VelocityEngine();
    velocityEngine.Init();

    using (StringWriter sw = new StringWriter())
    {
        bool ok = velocityEngine.Evaluate(new VelocityContext(), sw, "", template);
        Assert.IsTrue(ok, "Evaluation returned failure");
        return sw.ToString();
    }
}
于 2013-08-03T08:33:39.403 回答