2012-05-19 5 views
1

는 재생 컨트롤러에서스칼라 옵션 기본 인수

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

, 나는 기본

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

p1p2가 재생 응용 프로그램에서 선택 쿼리 문자열 매개 변수에서 비롯됩니다 인수, 예와 스칼라 클래스가 말 액션, 나는 URL에서 전달되는 것에 따라 MyClass을 호출 할 때 동적으로 인수 목록을 만드는 방법을 찾아 내려고합니다. 예를 들어, 전혀 전달 된 인수가 없을 수도 있습니다. p1이 전달 된 경우 new MyClass을 호출 한 다음을 호출합니다. 여기서 url 쿼리 매개 변수에서 p1이 추출되면 아이디어를 얻을 수 있습니다.

나중에 선택적 매개 변수를 추가 할 수 있으므로 인수 목록을 하드 코딩하지 않고 어떻게 할 수 있습니까? 인수 목록이나 그와 비슷한 것을 전달하기 위해 명명 된 인수를 사용하여 Map과 같은 객체를 구성 할 수 있습니까?

+0

의 중복 가능성 [스칼라 : 기본값을 사용하여 객체를 초기화하는 방법 (http://stackoverflow.com/questions/10472758/scala-how-to-initialize -an-object-default-values) – dhg

답변

3

지도를 사용하는 보조 생성자를 구현할 수 있습니다. 기본값을 반복하지 않으려면 상수로 사용할 수 있습니다.

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) 
+0

빠른 응답 주셔서 감사합니다. – Bob