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()_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 の method を使用して記述されます。これにより、 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 に答える