标签: scala-2.11

Play 2.4测试出错:CacheManager已关闭.它不能再使用了

我们的应用程序基于Play 2.4与Scala 2.11和Akka构建.使用的数据库是MySQL.

缓存在我们的应用程序中大量使用.我们使用Play的默认EhCache进行缓存.

我们的示例代码段:

import play.api.Play.current
import play.api.cache.Cache

case class Sample(var id: Option[String],
                 //.. other fields
)

class SampleTable(tag: Tag)
  extends Table[Sample](tag, "SAMPLE") {
  def id = column[Option[String]]("id", O.PrimaryKey)
  // .. other field defs
}

object SampleDAO extends TableQuery(new SampleTable(_)) with SQLWrapper {
  def get(id: String) : Future[Sample] = {
    val cacheKey = // our code to generate a unique cache key
    Cache.getOrElse[Future[[Sample]](cacheKey) {
      db.run(this.filter(_.id === id).result.headOption)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我们使用Play的内置Specs2进行测试. …

junit caching ehcache scala-2.11 playframework-2.4

10
推荐指数
1
解决办法
2688
查看次数

如何从Scala的WartRemover工具修复产品类型推断错误

我正在使用WartRemover工具来避免Scala 2.11代码中可能出现的错误.

具体来说,我想知道如何修复" 产品类型推断 "错误.

看看repo文档,我只能看到失败的例子,但我想知道我是如何修复这个错误的:

https://github.com/puffnfresh/wartremover#product.

做我的作业,我最后得到这个解释如何修复Type Inference Failures错误的其他链接https://blog.cppcabrera.com/posts/scala-wart-remover.html.我引用" 如果您看到下面的任何警告,修复通常就像提供类型注释一样简单 ",但我不明白这意味着什么.我真的需要一个具体的例子.

scala type-annotation scala-2.11

9
推荐指数
1
解决办法
2039
查看次数

Scala unapplySeq提取器语法

我(无意中)遇到了一些模式匹配语法,我没想到要编译,现在无法弄清楚.

它似乎与...有关unapplySeq.

请注意case x List(_,_)这个简单示例中的部分:

val xs = List(1, 2, 3)                          //> xs  : List[Int] = List(1, 2, 3)

xs match {
    case x List (_, _) => "yes"
    case _             => "no"
}                                               //> res0: String = yes
Run Code Online (Sandbox Code Playgroud)

我习惯于:@模式匹配语法,但我对此感到困惑.这种语法如何工作以及它与它的关系是什么(如果有的话)unapplySeq

在Scala 2.11.6中执行的示例代码

scala pattern-matching scala-2.11

9
推荐指数
1
解决办法
512
查看次数

scala spec2我无法创建一个必须同时使用_ ==和失败的测试

我是Scala和Spec2的新手.

我想创建以下测试,但我从编译器得到一个错误.

这是我想写的测试

import org.specs2.mutable._
import org.specs2.specification._
import org.specs2.matcher._
import org.specs2.matcher.MatchResult

class SimpleParserSpec extends Specification {

"SimpleParser" should {

val parser = new SimpleParser()

  "work with basic tweet" in {
      val tweet = """{"id":1,"text":"foo"}"""
      parser.parse(tweet) match {
        case Some(parsed) => {
                                parsed.text must be_==("foo")
                                parsed.id must be_==(1)
                              }
        case _ =>  failure("didn't parse tweet") 
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:C:\ Users\haques\Documents\workspace\SBT\jsonParser\src\test\scala\com\twitter\sample\simpleSimpleParserSpec.scala:17:找不到类型组织的证据参数的隐含值. specs2.execute.AsResult [对象]

问候,

Shohidul

testing scala specs2 scala-2.11 spec2

8
推荐指数
1
解决办法
1860
查看次数

何时将crosspaths设置为true?

我没有找到关于交叉路径的用途和目的的良好文档.有人可以指出我的文档或回答这些具体问题.

  1. 我的Scala版本是2.11.6,但是当crosspaths设置为true时,我会看到两个源文件夹 - ' scala'和' scala-2.11'.难道不应该只有这两个中的一个吗?这两个文件夹的含义是什么?
  2. 什么代码进入' scala'和什么进入' scala-2.11'?

sbt scala-2.11

8
推荐指数
1
解决办法
1709
查看次数

for-comprehension中的scala异常与类型注释

我试图理解在处理空值并在for-comprehension中键入注释时看起来像是奇怪的行为.

举个例子:

def f(): String = null

for {
  a <- Option("hello")
  b = f()
} yield (a, b)
Run Code Online (Sandbox Code Playgroud)

结果在预期中:

//> res0: Option[(String, String)] = Some((hello,null)) 
Run Code Online (Sandbox Code Playgroud)

但是,如果我在类型中添加类型注释 b

def f(): String = null

for {
  a <- Option("hello")
  b: String = f()
} yield (a, b)
Run Code Online (Sandbox Code Playgroud)

然后我得到一个运行时异常:

//> scala.MatchError: (hello,null) (of class scala.Tuple2)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?在第一个例子中是不是b隐式的类型String?第二个示例中的显式类型注释会发生什么变化?

(注意,示例在Scala 2.11.4中运行)

scala for-comprehension scala-2.11

7
推荐指数
1
解决办法
455
查看次数

是否有任何技巧可以在定义的同一文件中使用宏?

我有以下代码:

object Macros {

  import scala.language.experimental.macros
  import scala.reflect.macros.blackbox

  def hello(): Unit = macro hello_impl

  def hello_impl(c: blackbox.Context)(): c.Expr[Unit] = {
    import c.universe._
    reify {
      println("Hello World!")
    }
  }
}


object Main {

  def main(args: Array[String]): Unit = {
    Macros.hello()
  }

}
Run Code Online (Sandbox Code Playgroud)

它抛出以下编译错误:

Error:(21, 17) macro implementation not found: hello
(the most common reason for that is that you cannot use macro implementations in the same compilation run that defines them)
    Macros.hello()
                ^
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法"欺骗"编译器,以便在定义它们的同一个文件中使用宏扩展?我的动机如下:我喜欢用Scala编写代码,最近我在网上判断Codeforces中提交了一些问题,而且一些Scala结构变得很慢.所以,我想创建一些宏扩展,以便快速执行这些构造.但我不能提交多个文件.

谢谢!

scala scala-macros scala-2.11

7
推荐指数
1
解决办法
1623
查看次数

为什么在构建从服务器上通过jenkins用户运行测试失败并且缺少scala-library.jar?

我正在尝试运行一个jenkins工作,由于以下原因而失败:java.lang.RuntimeException: Missing scala-library.jar 运行此行时: /usr/lib/jvm/java-1.8.0/bin/java -Xmx4250M -Dsbt.log.noformat=true -jar /tmp/jenkins/slaves/build-slave-cb996aa/tools/org.jvnet.hudson.plugins.SbtPluginBuilder_SbtInstallation/default/bin/sbt-launch.jar 'set credentials += Credentials("Artifactory Realm", $ARTIFACTORY_HOST, $USER, $PASSWORD)' assembly

当我自己在机器上或从root用户运行时,它运行正常(从jFrog获取工件,编译,运行测试并打包jar),但是当从用户运行时jenkins它失败了.

我发现从root运行它时,它会在路径中找到库 /root/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar

我正在运行sbt.version = 0.13.8,scalaVersion := "2.11.11" 我显然不希望jenkins工作使用root工作,我们都知道这不对.完整的堆栈是:

java.lang.RuntimeException: Missing scala-library.jar
        at scala.sys.package$.error(package.scala:27)
        at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1$$anonfun$file$1$1.apply(Defaults.scala:382)
        at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1$$anonfun$file$1$1.apply(Defaults.scala:382)
        at scala.Option.getOrElse(Option.scala:120)
        at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1.file$1(Defaults.scala:382)
        at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1.apply(Defaults.scala:384)
        at sbt.Defaults$$anonfun$scalaInstanceFromUpdate$1.apply(Defaults.scala:374)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) …
Run Code Online (Sandbox Code Playgroud)

scala sbt jenkins scala-2.11

7
推荐指数
1
解决办法
347
查看次数

简单地使用Java中的Scala集合而不是使用2.11编译

所以我有这个超级令人兴奋的Java类:

import scala.collection.immutable.Stream;

public class EmptyStreamFactory {
  public static Stream<String> createEmptyStringStream() {
    return Stream.<String>empty();
  }
}
Run Code Online (Sandbox Code Playgroud)

使用scala-library.jar类路径上的2.10.4编译得很好(或2.9.2,这是值得的).现在我用2.11尝试:

EmptyStreamFactory.java:5: error: incompatible types
    return Stream.<String>empty();
                               ^
  required: Stream<String>
  found:    GenTraversable
1 error
Run Code Online (Sandbox Code Playgroud)

这有什么意义呢?乍看之下唯一可能与远程相关的区别是2.11中Stream.Empty不再延伸Serializable,但我不知道这会如何导致这个问题.同样的事情发生在List,等等.

有一个简单的解决方法 - 你可以选择适当的类型 - 但我想了解这里发生了什么.

(我使用的是Oracle的JDK,版本1.7.0_67.)

java scala scala-2.11

6
推荐指数
1
解决办法
546
查看次数

如何在Build.scala中设置sbt-proguard插件

我想在我的项目中使用sbt-proguard插件,但我需要在Build.scala文件中进行设置.

我阅读了文档,但是只有一个build.sbt文件的例子,在我的情况下不起作用.我需要知道如何为我的Build.scala文件配置插件.

这是repo的链接:https://github.com/sbt/sbt-proguard/blob/master/README.md#example

仅供参考:我使用的是scala.version = 2.11.4和sbt.version = 0.13.5

scala sbt scala-2.11 sbt-proguard

6
推荐指数
1
解决办法
977
查看次数