установка отрицательных литералов в NVelocity

Я пытаюсь установить отрицательный литерал в моем шаблоне 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


person David    schedule 02.08.2013    source источник


Ответы (1)


Не могли бы вы предоставить неудачный модульный тест, потому что отрицательные литералы мне подходят. Я использовал HEAD нашего репозитория исходных текстов NVelocity, однако я нам неизвестны какие-либо изменения в этой области с момента выпуска 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();
    }
}
person Jonathon Rossi    schedule 03.08.2013