pdi*_*lag 4 functional-programming scala scala-2.8
我正在处理一个Polygon类,它包含一个顶点数组Array[Vec2](用Vec2一个简单的case类来定义x和y).
现在,我想实现一个函数来返回多边形的边缘Array[LineSegment](其中LineSegment又是一个定义开始和结束的简单案例类).
解决方案是创建将每个顶点连接到数组中的下一个顶点的线段,最后将最后一个顶点连接到第一个顶点.
我只习惯于命令式编程,所以这是我的必要方法:
def edges: Array[LineSegment] = {
val result = new Array[LineSegment](vertices.length)
for (i <- 0 to vertices.length - 2) {
result.update(i, LineSegment(vertices.apply(i), vertices.apply(i + 1)))
}
result.update(edges.length - 1, LineSegment(vertices.head, vertices.last))
result
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但很简单.我想在这里使用函数式编程的优点,但我仍然坚持这一点.
我的想法是把它写成类似于这样的东西:
def edges: Array[LineSegment] = {
for (v <- vertices) yield
LineSegment(v, if (v == vertices.last) vertices.head else /* next? */)
}
Run Code Online (Sandbox Code Playgroud)
问题是,在给定当前项目的情况下,无法访问数组中的下一个项目v.
我已经读过关于sliding定义的方法IterableLike,但是这似乎是非旋转的,即它不会考虑第一个项目在最后一个项目之后,因此不会返回它.
那么什么是一个很好的"scala-esque"方法呢?
Deb*_*ski 10
当然你可以使用sliding:
(vertices :+ vertices.head) sliding 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |