首页 > 解决方案 > 根据命令行参数的值导入 Scala 对象

问题描述

可以说我有以下结构:

src
 - main 
  - scala
   - model
     - One.scala 
     - Two.scala
   - main
     - Test.scala

其中 Test.scala 扩展 App 并接受一个参数:

object Test extends App {

val param: String = args.head  

// Based on param, I want to use either One or Two?

}
// sbt run Two

我如何使用定义One.scalaTwo.scala取决于param.

感谢任何/所有输入..

标签: scalaimport

解决方案


确保OneTwo共享一些通用接口,在运行时选择该接口的实例,然后导入该实例的成员:

trait CommonInterface {
  def foo(): Unit
}

object One extends CommonInterface { def foo() = println("1") }
object Two extends CommonInterface { def foo() = println("2") }

object Main extends App {
  // check args etc...
  val ci = if (args(0) == "one") One else Two
  import ci._
  // do something with `foo` here
  foo()
}

推荐阅读