scala为yield设置一个值

cou*_*ech 3 swing scala yield-keyword

我想创建一个列表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
        }
Run Code Online (Sandbox Code Playgroud)

我想生成一个List[Constraints]并为每个约束设置不同的x,y值以便稍后,当我稍后添加组件时,它们将在网格中.

Dan*_*ral 6

你只需要cyield块的末尾返回以获得一个集合Constraints.要让它返回a List,请使用a List而不是a Range.像这样:

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

事实上,原始代码不会在Scala 2.7中达到您的预期,因为,范围(如Range)在非严格.您可以在Stack Overflow或Google上查找它,但缺点是每次查找元素时d,它都会创建一个新元素Constraint.Scala 2.8的此行为已更改.