0

NVelocity テンプレートで負のリテラルを設定しようとしていますが、解析されません。これを機能させるためのトリックはありますか?

の数が機能します:
#set($age = 27)

の数は機能しません:
#set($age = -27)
#set($age = 27*-1)

字句エラー: NVelocity.Runtime.Parser.TokenMgrError: 行 62、列 15 で字句エラーが発生しました: "-"

古い Apache リリースではなく、Castle.NVelocity (dll-AssemblyVersion 1.1.1.0、FileVersion=1.1.1.60) を使用しています

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 に答える