scala - 将映射参数应用于函数的默认/命名参数的功能方法

标签 scala functional-programming

我使用默认/命名参数为我提供了一个带有构建器函数的库。有点像

def builder = new {
    def apply(
      a:Int = 0,
      b:Int = 0,
      c:Int = 0):String = {
       "a="+a+", b="+b+", c="+c
      }
}

我需要使用参数的映射集合(http 查询参数)并正确调用构建器。我可以用重复的代码暴力破解它,但必须有更好的“功能”方式来做到这一点。以下是我相当糟糕的尝试。如您所见,它覆盖了构建器的默认参数。请给我亮光!

val inParams = Map("a" -> 1, "b" -> 2, "c" -> 3) //3 params passed in

builder(
  in.get("a").getOrElse(0),
  in.get("b").getOrElse(0),
  in.get("c").getOrElse(0)
)

val inParams = Map("a" -> 1, "c" -> 3) //2 params, out of sequence
builder(
  in.get("a").getOrElse(0),
  in.get("b").getOrElse(0),
  in.get("c").getOrElse(0)
)

最佳答案

Map 有一个 getOrElse 方法。

val in = Map("a" -> 1, "c" -> 3) //2 params, out of sequence
builder(
  in.getOrElse("a", 0),
  in.getOrElse("b", 0),
  in.getOrElse("c", 0)
)

或者你也可以这样做:

val in = Map("a" -> 1, "c" -> 3).withDefaultValue(0)
builder(in("a"), in("b"), in("c"))

关于scala - 将映射参数应用于函数的默认/命名参数的功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7394217/

相关文章:

java - Scala 和进程中的内存泄漏

Scala 宏 : Checking for a certain annotation

scala - 为什么流折叠操作会抛出内存不足异常?

scala - 如何在 Scala 中使用参数化特征的反射?

scala - 使用 reduceLeft 检查两个相邻元素是否有序

functional-programming - 为什么我不能反转迭代器两次以获得向量的最后两个数字?

swift - Swift 中奇怪的元组展开

scala - 如何在 Play 2.4 中正确记录应用程序 DEBUG 和 INFO 消息?

functional-programming - 使用 SML 基础查找文件

javascript - 使用 JavaScript .map() 和 .filter() 按 lang 搜索作者/书籍数据模块