【发布时间】:2015-08-03 07:35:27
【问题描述】:
我有以下正在运行的代码:
case class Step() {
def bindings(): Map[String, Any] = ???
}
class Builder {
private val globalBindings = scala.collection.mutable.HashMap.empty[String, Any]
private val steps = scala.collection.mutable.ArrayBuffer.empty[Step]
private def context: Map[String, Any] =
globalBindings.foldLeft(Map[String, Any]())((l, r) => l + r) ++ Map[String, Any]("steps" -> steps.foldLeft(Vector[Map[String, Any]]())((l, r) => l.+:(r.bindings)))
}
但我认为它可以被简化,以便在 'context' 方法中不需要第一个 foldLeft。
所需的结果是生成一个映射,其中条目值是字符串、稍后将在其上调用 toString 的对象或返回字符串的函数。
这是我能用 Scala 的类型系统做的最好的事情,还是我可以让代码更清晰?
TIA
【问题讨论】:
-
最好在 99% 的情况下远离
Any— 你不再编写 Java 了:) -
为什么值类型必须不同?他们不都评估为
String吗?它可以是一个评估到String的函数。该函数应该能够处理如何评估给定字符串值的逻辑。
标签: scala generics collections types