我想为多个测试环境(生产,登台,开发)定义不同的数据库连接.在阅读了文章" 如何使用sbt 0.12.2为sbt test指定配置文件? "后,似乎可以在早期版本的Play中使用以下SBT设置:
val main = play.Project(appName, appVersion, appDependencies).settings(
javaOptions in Test += "-Dconfig.file=conf/test.conf"
)
Run Code Online (Sandbox Code Playgroud)
但是,如果我在Build.scala中使用此设置,则会收到以下错误:
not found: value javaOptions
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何为不同的测试环境定义不同的连接?
编辑: 可能的解决方法是在测试期间覆盖默认设置.这可以使用环境变量来完成.
object Config {
var defaultConfig = Map(
"db.default.user" -> "user",
"db.default.pass" -> "************"
)
def additionalConfiguration(): Map[String, _] = sys.env.getOrElse("PLAY_TEST_SCOPE", "") match {
case "development" => {
defaultConfig += "db.default.url" -> "jdbc:mysql://host:3306/development"
defaultConfig
}
case "staging" => {
defaultConfig += "db.default.url" -> "jdbc:mysql://host:3306/staging"
defaultConfig
}
case "production" => {
defaultConfig += "db.default.url" -> "jdbc:mysql://host:3306/production"
defaultConfig …Run Code Online (Sandbox Code Playgroud) 我们计划使用AngularJS创建托管Web应用程序.作为UI Framework,我们发现Ionic和Onsen可以很好地与AngularJS配合使用.这两个框架都促进了它们特别适用于混合应用程序.但我们正确理解,这两个框架都基于Web技术.那么在为非混合应用程序使用建议的UI框架时有什么缺点?主要是浏览器支持吗?
谢谢
我们假设我有以下两个序列:
val index = Seq(2,5,1,4,7,6,3)
val unsorted = Seq(7,6,5,4,3,2,1)
Run Code Online (Sandbox Code Playgroud)
第一个是应该对第二个进行排序的索引.我目前的解决方案是遍历索引并使用未排序序列中找到的元素构造一个新序列.
val sorted = index.foldLeft(Seq[Int]()) { (s, num) =>
s ++ Seq(unsorted.find(_ == num).get)
}
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案似乎非常低效且容易出错.在每次迭代时,它都会搜索完整的未排序序列.如果索引和未排序列表不同步,则会抛出错误或省略元素.在这两种情况下,不同步元素都应附加到有序序列中.
对于这个问题,是否有更有效和可靠的解决方案?还是有一种适合这种范式的排序算法?
注意:这是一个构造的例子.实际上,我想通过文档Id的有序列表对mongodb文档列表进行排序.
更新1
我选择了Marius Danila的答案,因为它似乎是解决我问题的最快速和最快速的解决方案.它没有非同步项解决方案,但这可以很容易地实现.
所以这是更新的解决方案:
def sort[T: ClassTag, Key](index: Seq[Key], unsorted: Seq[T], key: T => Key): Seq[T] = {
val positionMapping = HashMap(index.zipWithIndex: _*)
val inSync = new Array[T](unsorted.size)
val notInSync = new ArrayBuffer[T]()
for (item <- unsorted) {
if (positionMapping.contains(key(item))) {
inSync(positionMapping(key(item))) = item
} else {
notInSync.append(item)
}
}
inSync.filterNot(_ == …Run Code Online (Sandbox Code Playgroud)