【问题标题】:Scala optional default argumentsScala 可选的默认参数
【发布时间】:2012-05-26 21:18:48
【问题描述】:

假设我有一个带有默认参数的 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-like 对象作为参数列表或类似的东西传递?

【问题讨论】:

标签: scala playframework


【解决方案1】:

您可以实现一个带有 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2013-10-08
    相关资源
    最近更新 更多