我想知道为什么不允许多重重载方法具有默认参数(当它不明确时),更重要的是,如果有人可以考虑解决该限制的解决方法。重载方法中的默认参数
这是一些背景。我使用这招基本类型和引用来区分:
def toJson[T](writer: Writer, data: T)(implicit ev: T <:< AnyVal = null) {
val wrapped = (Option(ev), data) match {
case (Some(_), _) | (_, _:String) => Map("result" -> data)
case _ => data
}
jsonMapper.writeValue(writer, data)
}
当T
为基本类型,ev
不是空的,我可以把数据封装成Map
出示有效的JSON,而不是仅仅打印出原始价值。 这有效,但问题是我需要有不同的功能。例如:
def toJson[T](out: OutputStream, data: T)(implicit ev: T <:< AnyVal = null) =
toJson(new OutputStreamWriter(out), data)
def toJson(data: T)(implicit ev: T <:< AnyVal = null) = {
val w = new StringWriter
toJson(w, data)
w.toString
}
等等 不幸的是,这并不能编译,因为重载函数不能都出于某种原因默认参数。我想不出有什么理由不允许这么做,并且对这种限制的理由感到好奇。更重要的是,正如我上面所说,如果有人可以推荐另一种方法做什么,我想在这里做(除了想出一个函数的15个不同但有意义的名称等),我会很感激的建议。
https://groups.google.com/forum/#!msg/scala-user/FyQK3-cqfaY/fXLHr8QsW_0J –