2016-09-30 11 views
0

나는 내 설정 파일로 사용 내 프로젝트의 특성, 그런 일이 : 모두이 특성은 extends와 함께 사용스칼라 : 사용자 입력에 따라 특성에 발을 초기화

trait config { 
    val people = Seq("John","Jessie") 
} 

를) 내 물건 (주요 것을 제외하고). 내가하고 싶은 어떤 사용자로부터 내 main 기능에받은 args에 따라 people에 다른 값을 할당하는 것입니다, 그래서 내가 뭔가해야합니다 :

trait config { 
    val people = args.head match { 
     case "A" => Seq("John","Jessie") 
     case "B" => Seq("Bill","James","Brad") 
     case _ => Seq("Jimmy") 
}} 

이 할 수있는 방법이 있나요를?

trait config { 
    app: App => 

    lazy val people = args.head match { 
    case "A" => Seq("John","Jessie") 
    case "B" => Seq("Bill","James","Brad") 
    case _ => Seq("Jimmy") 
    } 
} 

object Main extends App with config { 
    people.mkString 
} 

또는 당신은 응용 프로그램이 아닌 다른 종류의 작동하도록 형질을 줄일 수 있습니다 : 당신이 물어 무엇

+0

이 구성 유형의 데이터에 가장 적합한 패턴 않을보십시오 할 수있는 시스템 전체 설정을 제공합니다. 원하는 설정 데이터가 포함 된 특성을 가질 수 있지만 모든 특성 데이터를 포함시켜 모든 개체에 채워야합니다. 당신이 특성을 정의하기를 원하는 것처럼 들릴지 모르겠다. 그래서 그것을 채울 필요없이 확장 할 수는 있지만 불가능하다. 그러나 당신이 할 수 있다면 데이터가 공유되지 않기 때문에 나쁜 생각이 될 것입니다. 비효율적 인 개체를 확장하는 각 개체의 실제 개체가 다를 수 있습니다. 나는 Dependency Injection을 연구 할 것이다. –

+0

죄송 합니다만,이 편집기를 사용하는 것이 좋지 않으므로 실수로 내 의견이 커밋되기 전에 커밋했습니다. 새줄이 너무 힘들었다는 것을 누가 알았습니까? :) –

+0

다음 모든 필수 개체 및 클래스에 모든 구성 매개 변수를 주입하는 좋은 방법은 무엇입니까? – shakedzy

답변

2

이 가능합니다.

trait config { 
    protected def args: Array[String] 

    lazy val people = args.head match { 
    case "A" => Seq("John","Jessie") 
    case "B" => Seq("Bill","James","Brad") 
    case _ => Seq("Jimmy") 
    } 
} 

그러나 이미 지적했듯이 좋은 패턴이 아닙니다.

당신이 Typesafe Config

+0

Typesafe로 필요한 작업을 수행하는 방법은 무엇입니까? – shakedzy

관련 문제