Scala 2.9引入了并行集合.对于某些任务来说,它们是非常棒的工具.但是,它们如何在内部工作,我是否能够影响行为/配置?
他们使用什么方法来确定最佳线程数?如果我对结果不满意,是否有任何配置参数需要调整?
我不仅对实际创建了多少线程感兴趣,我还对实际工作如何在它们之间分配感兴趣.如何收集结果以及幕后有多少魔法.Scala是否会以某种方式测试集合是否足够大以便从并行处理中受益?
Scala 重写的specs2测试框架将自动化测试与scalacheck集成在一起.specs2文档中给出的关于如何将scalacheck与specs2一起使用的示例使用整数或更复杂的自定义生成器,如eric的json示例中所示.
虽然试图让一个稍微不那么复杂的例子工作,但我很难挣扎,因为我不知道如果我想生成String参数而不是Integers,会如何使用specs2和scalacheck.这个快速入门示例如何?
import org.scalacheck._
object StringSpecification extends Properties("String") {
property("startsWith") = Prop.forAll((a: String, b: String)
=> (a+b).startsWith(a))
property("endsWith") = Prop.forAll((a: String, b: String)
=> (a+b).endsWith(b))
// Is this really always true?
property("concat") = Prop.forAll((a: String, b: String) =>
(a+b).length > a.length && (a+b).length > b.length
)
property("substring") = Prop.forAll((a: String, b: String) =>
(a+b).substring(a.length) == b
)
property("substring") = Prop.forAll((a: String, b: String, c: String) =>
(a+b+c).substring(a.length, a.length+b.length) == b
) …
Run Code Online (Sandbox Code Playgroud) 我目前的申请是基于akka 1.1.它有多个ProjectAnalysisActors负责处理特定项目的分析任务.当这样的actor接收到通用开始消息时,开始分析.完成一个步骤后,只要定义了一个步骤,它就会向下一步发送一条消息.执行代码基本上如下所示
sealed trait AnalysisEvent {
def run(project: Project): Future[Any]
def nextStep: AnalysisEvent = null
}
case class StartAnalysis() extends AnalysisEvent {
override def run ...
override def nextStep: AnalysisEvent = new FirstStep
}
case class FirstStep() extends AnalysisEvent {
override def run ...
override def nextStep: AnalysisEvent = new SecondStep
}
case class SecondStep() extends AnalysisEvent {
...
}
class ProjectAnalysisActor(project: Project) extends Actor {
def receive = {
case event: AnalysisEvent =>
val future = event.run(project) …Run Code Online (Sandbox Code Playgroud) 在关于组成期货的akka 1.1文档的例子中,我想知道如何以编程方式设置生成的未来的超时.我知道我可以调整akka.conf中的全局超时,但是我想仅为这段代码做到这一点.
示例代码如下所示
val f1 = actor1 !!! msg1
val f2 = actor2 !!! msg2
val f3 = for {
a: Int <- f1
b: Int <- f2
c: String <- actor3 !!! (a + b)
} yield c
val result = f3.get()
Run Code Online (Sandbox Code Playgroud)
我是对的,akka在这个例子中总共创造了四个期货吗?
在第一种情况下很容易改变超时,例如
val f1 = actor1 !!! (msg1, 15000) // sets timeout to 15 seconds
Run Code Online (Sandbox Code Playgroud)
但是如何设置包装未来的超时?有任何想法吗?
给定具有am:n关系的遗留数据库以及关系的一些附加属性,如何使用squeryl定义.最后,表格应如下所示:
+--------------+ +---------------+ +----------------+
| TableA | | Rel_A_B | | TableB |
+--------------+ ____ +---------------+ ____ +----------------+
| id: Int | | tableA: int | | compkey_1: int |
| (more attrs) | | tableB_1: int | | compkey_2: int |
+--------------+ | tableB_2: int | | (more attrs) |
| value: Varchar| +----------------+
| date: Date |
+---------------+
使用squeryl手动定义三个表没有问题.但是,据我所知,目前的文档(0.9.4)没有可能与关系的其他属性定义多对多关系.
这就是我定义三个表和两个一对多关系的原因:
// TableA
class TableA(val id: Int, ...) extends KeyedEntity[Int] {
def this() = this(0, ...)
}
// TableB …Run Code Online (Sandbox Code Playgroud) 我处于这种情况,我有许多ScalaTest编写的测试(JUnit兼容),我想测量运行测试时我得到的代码覆盖率.
我不想直接使用SBT,但有一个Eclipse Scala项目,其中我有许多我想运行的测试用例.
对我来说最好的方法是什么?
有没有人有一个如何设置sbt来构建一个ANTLR文件(到scala),然后编译生成的代码的例子.
我的文件布局
src/main/scala/Test.scala // scala test rig
src/main/scala/Test.g // antlr grammar
build/antlr/TestParser.scala // antlr output files
build/antlr/TestLexer.scala
Run Code Online (Sandbox Code Playgroud)
我的sbt应该包含什么?我知道有一个插件用于拉动ANTLR的规则,但我无法使其工作.(这个世界还是新手)
有没有一种方便的方法可以针对多个sbt版本自动交叉构建sbt 0.10/0.11.x插件?我想这有点鸡蛋问题,但也许有人知道如何解决这个问题.
注意,我不是在寻找scala交叉构建,这个问题只针对sbt-plugins.
给出一个单词对列表
val terms = ("word1a", "word1b") :: ("word2a", "word2b") :: ... :: Nil
Run Code Online (Sandbox Code Playgroud)
Scala中最优雅的方法是测试文本中是否至少有一对出现?当测试到达第一场比赛时,测试应该尽快终止.你会如何解决这个问题?
编辑:更确切地说,我想知道一对中的两个单词是否出现在文本中的某个位置(不一定按顺序).如果列表中的一个对的情况如此,则该方法应该返回true.没有必要返回匹配的对,如果多于一对匹配则不重要.