1

デフォルトの引数を持つ Scala クラスがあるとします

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

p1p2Play アプリのオプションのクエリ文字列パラメータから取得されます。

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

MyClassPlay コントローラー アクションでは、URL で渡された内容に応じて、呼び出し時に引数リストを動的に作成する方法を見つけようとしています。たとえば、引数がまったく渡されない場合があります。この場合、 が渡された場合は を呼び出しnew MyClassます。次に、URL クエリ パラメータから p1 が抽出された場所p1を呼び出します。new MyClass(p1)

将来、オプションのパラメーターを追加する可能性があるため、引数のリストをハードコーディングせずにこれを行うにはどうすればよいですか。Map引数リストなどとして渡す名前付き引数を持つオブジェクトのようなものを構築することは可能ですか?

4

1 に答える 1

3

Map を取る 2 次コンストラクターを実装できます。デフォルトを繰り返したくない場合は、それらを定数として使用できます。

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)
于 2012-05-19T17:10:34.700 に答える