在Rythm Engine中使用lambda表达式

时间:2018-04-21 01:20:10

标签: java rythm

我正在尝试将lambda表达式与Rythm Engine一起使用,并且它在大多数情况下都有效。但是,当我在lambda表达式中调用标记时,它不起作用。

最简单的例子:

@test(x -> blabla(x) )

@def test(java.util.function.Function f) {
    @f.apply("Test")
}

@def blabla(String text) {
    ...
    Test: @text
    ...
}

如果我在lambda表达式中使用字符串连接,它可以很好地工作,但在我的实际代码中,我需要调用一个复杂的标记。

有人知道我该怎么做吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

最后,我找到了解决方案。

修改生成的java代码,可以看出名为“blabla”的函数(对不起,愚蠢的名字)有签名:

public org.rythmengine.utils.RawData blabla(String text)

因此,使其工作的方法是调用“RawData.toString()”。

解决方案是:

@test(x -> blabla( x.toString() )

@def test(java.util.function.Function<String, String> f) {
    @f.apply("Test")
}

@def blabla(String text) {
    ...
    Test: @text
    ...
}

为了防止不必要的强制转换,我将参数“String,String”添加到泛型类“java.util.function.Function”。

要测试代码,定义环境变量“home.tmp.dir”并使用原始CodeType非常有用:

Map<String, Object> conf = new HashMap<>();
conf.put("home.tmp.dir", "./rythm/"); // Generated code

RythmEngine engine = new RythmEngine(conf);
engine.prepare(ICodeType.DefImpl.RAW);