Java 在Rythm引擎中使用lambda表达式

Java 在Rythm引擎中使用lambda表达式,java,rythm,Java,Rythm,我尝试在Rythm引擎中使用lambda表达式,它在大多数情况下都能工作。但是,当我在lambda表达式中调用标记时,它不起作用 最简单的例子: @test(x -> blabla(x) ) @def test(java.util.function.Function f) { @f.apply("Test") } @def blabla(String text) { ... Test: @text ... } 如果我在lambda表达式中使用字符串连接

我尝试在Rythm引擎中使用lambda表达式,它在大多数情况下都能工作。但是,当我在lambda表达式中调用标记时,它不起作用

最简单的例子:

@test(x -> blabla(x) )

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

@def blabla(String text) {
    ...
    Test: @text
    ...
}
如果我在lambda表达式中使用字符串连接,它工作得很好,但是在我的实际代码中,我需要调用一个复杂的标记

有人知道我怎么做吗


谢谢。

最后,我找到了一个解决方案

修改生成的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
    ...
}
@test(x->blabla(x.toString())
@def测试(java.util.function.function f){
@f、 应用(“测试”)
}
@def blabla(字符串文本){
...
测试:@text
...
}
为了防止不必要的转换,我将参数“String,String”添加到泛型类“java.util.function.function”中

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

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

RythmEngine engine = new RythmEngine(conf);
engine.prepare(ICodeType.DefImpl.RAW);
Map conf=new HashMap();
conf.put(“home.tmp.dir”,“/rythm/”;//生成的代码
RythmEngine=新RythmEngine(配置);
发动机准备(ICodeType.DefImpl.RAW);