3

のリストを作りたいGridBagPanel.Constraints。scala プログラミングの本で、クールなfor-yield構造があることを読みましたが、コードがコンパイルされないため、正しく動作する方法を理解していない可能性があります。ここにあります:

        val d = for {
            i <- 0 until 4
            j <- 0 until 4
        } yield {
            c = new Constraints
            c.gridx = j
            c.gridy = i
        }

を生成しList[Constraints]、すべての制約に対して異なる x、y 値を設定したいので、後でコンポーネントを追加すると、それらはグリッドになります。

4

2 に答える 2

6

のコレクションを取得するには、ブロックcの最後に戻る必要があります。を返すようにするには、 a の代わりに aを使用します。このような:yieldConstraintsListListRange

val d = for {
            i <- List.range(0, 4)
            j <- List.range(0, 4)
        } yield {
            c = new Constraints
            c.gridx = j
            c.gridy = i
            c
        }

実際、元のコードは Scala 2.7 で期待していたようには動作しませんRange。Stack Overflow や Google で調べることもできますが、要するに、 で要素を調べるたびにd新しい が作成されるということConstraintです。この動作は Scala 2.8 で変更されました。

于 2010-03-24T01:51:02.793 に答える
1

これを試して:

def conCreate = { 
    val c = new Constraints
    c.gridx = j
    c.gridy = i
    c
}

val d = for( i <- 0 until 4;
             j <- 0 until 4 ) yield conCreate(i,j)

あなたの呼び出しを関数の呼び出しに置き換えました。until を Iterator.range(0,4) に置き換えましたが、until に戻しました。どちらも有効なコードであり、実際には同じことを意味します。

于 2010-03-24T01:13:18.237 に答える