Scala:根据用户输入初始化特征中的val

时间:2016-09-30 15:50:27

标签: scala traits

我的项目中有一个特性,我将其用作配置文件,类似于:

B

此特征与ohai}一起用于我的所有对象(主要对象除外)。我想要做的是根据用户在trait config { val people = Seq("John","Jessie") } 函数中收到的extendspeople分配不同的值,所以我会有类似的内容:

args

有办法吗?

1 个答案:

答案 0 :(得分:2)

你问的是可能的:

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
}

或者您可以减少特性,使其适用于除App之外的其他类型。

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