我有一个以命令式和功能性(我在这里尽了最大努力)方式实现的方法。该方法遍历 ArrayBuffer[Creature],计算到每个生物的距离并返回最近的或无(如果世界上没有生物,除了“this”)。
至关重要的:
private def closestEnemy: Option[Creature] = {
var closest: Option[Creature] = None
var distanceToClosest = Int.MaxValue
for(creature <- game.creatures if creature != this) {
val distance = distanceTo(creature)
if(distance < distanceToClosest) {
closest = Some(creature)
distanceToClosest = distance
}
}
closest
}
功能:
private def closestEnemy: Option[Creature] =
game.creatures filter { _ != this } map { creature => (creature, distanceTo(creature)) } match {
case creaturesWithDistance if creaturesWithDistance.isEmpty => None
case creaturesWithDistance => Some(creaturesWithDistance minBy { _._2 } _1)
}
功能代码看起来不那么明显(可能可以简化,但我不知道如何简化)而且我不确定我是否能够在一个月内快速阅读它。我的问题是习惯或功能问题不适合这种特殊情况吗?刚开始使用 Scala 的时候,你有没有这样的疑惑?一段时间后,您的功能技能是否有很大提高并完全击败了命令式方法?请发表您的经验。
谢谢!