Scala可选的默认参数

时间:2012-05-19 17:01:22

标签: scala playframework

假设我有一个带默认参数的Scala类

class MyClass(p1: Int = 0, p2: Int = 1)

p1p2来自Play应用中的可选查询字符串参数,例如,

http://mysite.com/blah?p1=10&p2=20 

在Play控制器操作中,我试图找出一种在调用MyClass时动态构造参数列表的方法,具体取决于在url中传递的内容。例如,可能根本没有传递参数,在这种情况下我会调用new MyClass,如果传递p1,那么我会调用new MyClass(p1),其中p1是从url查询参数中提取的,你明白了。

如何在不对参数列表进行硬编码的情况下执行此操作,因为我可能会在将来添加其他可选参数。是否有可能构造一个具有命名参数的Map类对象作为参数列表或类似的东西传递?

1 个答案:

答案 0 :(得分:3)

您可以实现一个带有Map的辅助构造函数。如果您不想重复默认值,那么您可以将它们作为常量。

val p1Default = 0
val p2Default = 1

class MyClass(p1: Int = p1Default, p2: Int = p2Default) {
  def this(m: Map[String, Int]) =
    this(m.getOrElse("p1", p1Default), m.getOrElse("p2", p2Default))
}

用法:

new MyClass(p1 = 5, p2 = 6)
new MyClass(Map("p1" -> 5))
new MyClass(p2 = 6)