我使用默认/命名参数为我提供了一个带有构建器函数的库。有点像
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/