3

我一直在尝试学习如何使用 Suns代码模型库,但我对生成for 循环和 if-else 块感到非常困惑。我正在为如何为 if-else 块和 for 循环生成条件而苦苦挣扎,同时也在为如何生成它们的主体而苦苦挣扎。

例如:

if (condition) { //How is this condition generated?
     //How is this body filled?
} else {

} 

对于循环:

for(condition) {  //How is this condition generated?
   //How is this body filled?
}
4

1 回答 1

4

我假设您已经定义了一个类和方法。

要编写条件 if/else 语句,您需要在类上使用_if()and_else()方法JBody。这会将语句添加到您定义的方法的主体中。从这些方法中,您可以通过调用或直接返回的_then()方法来引用并添加到它们的主体中。这是一个例子:_if()_else()JBody

JConditional condition = body._if(input.lt(JExpr.lit(42)));
condition._then().add(
    codeModel.ref(System.class).staticRef("out").invoke("println").arg(JExpr.lit("hello"))); 
condition._else().add(
    codeModel.ref(System.class).staticRef("out").invoke("println").arg(JExpr.lit("world")));

输出:

if (input< 42) {
    System.out.println("hello");
} else {
    System.out.println("world");
}

要编写一个 for 循环,有几个选项。传统的 for 循环是使用_for()JBlock 上的方法编写的,它允许您链接对应于 for 循环声明的各个部分的init()test()和方法:update()

JForLoop forLoop = body._for();
JVar ivar = forLoop.init(codeModel.INT, "i", JExpr.lit(0));
forLoop.test(ivar.lt(JExpr.lit(42)));
forLoop.update(ivar.assignPlus(JExpr.lit(1)));

forLoop.body().add(
    codeModel.ref(System.class).staticRef("out").invoke("println").arg(ivar));

输出:

for (int i = 0; (i< 42); i += 1) {
    System.out.println(i);
}

对于踢,这是一个工作示例:https ://gist.github.com/johncarl81/764714​​6

于 2013-11-25T19:24:12.793 回答