我们的应用程序基于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进行测试. …
我正在使用WartRemover工具来避免Scala 2.11代码中可能出现的错误.
具体来说,我想知道如何修复" 产品类型推断 "错误.
看看repo文档,我只能看到失败的例子,但我想知道我是如何修复这个错误的:
https://github.com/puffnfresh/wartremover#product.
做我的作业,我最后得到这个解释如何修复Type Inference Failures错误的其他链接https://blog.cppcabrera.com/posts/scala-wart-remover.html.我引用" 如果您看到下面的任何警告,修复通常就像提供类型注释一样简单 ",但我不明白这意味着什么.我真的需要一个具体的例子.
我(无意中)遇到了一些模式匹配语法,我没想到要编译,现在无法弄清楚.
它似乎与...有关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和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
我没有找到关于交叉路径的用途和目的的良好文档.有人可以指出我的文档或回答这些具体问题.
scala
'和' scala-2.11
'.难道不应该只有这两个中的一个吗?这两个文件夹的含义是什么?scala
'和什么进入' scala-2.11
'?我试图理解在处理空值并在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中运行)
我有以下代码:
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结构变得很慢.所以,我想创建一些宏扩展,以便快速执行这些构造.但我不能提交多个文件.
谢谢!
我正在尝试运行一个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)所以我有这个超级令人兴奋的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.)
我想在我的项目中使用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-2.11 ×10
scala ×8
sbt ×3
caching ×1
ehcache ×1
java ×1
jenkins ×1
junit ×1
sbt-proguard ×1
scala-macros ×1
spec2 ×1
specs2 ×1
testing ×1