标签: scala-2.9

Scala:在一个语句中将字符串写入文件

对于在Scala中读取文件,有

Source.fromFile("file.txt").mkString
Run Code Online (Sandbox Code Playgroud)

是否有一种等效和简洁的方法来将字符串写入文件?

大多数语言支持这样的东西.我最喜欢的是Groovy:

def f = new File("file.txt")
// Read
def s = f.text
// Write
f.text = "file contents"
Run Code Online (Sandbox Code Playgroud)

我想将代码用于从单行到短代码的程序.必须使用自己的库在这里没有意义.我希望有一种现代语言能让我方便地写一些文件.

有类似的帖子,但他们没有回答我的确切问题或专注于较旧的Scala版本.

例如:

scala scala-2.9

135
推荐指数
9
解决办法
10万
查看次数

Scala Koans中的===(三重等于)运算符是什么?

我开始研究Scala Koans,它是围绕一系列单元测试组织的,需要填充空白.(这个想法是在类似的Ruby Koans项目之后建模的.)你启动了运行测试的sbt工具,并告诫:

[info]   + ***************************************** 
[info]   +  
[info]   +  
[info]   +  
[info]   + Please meditate on koan "None equals None" of suite "AboutEmptyValues" 
[info]   +  
[info]   +  
[info]   +  
[info]   + ***************************************** 

...所以你去看看这个单元测试它说:

test("None equals None") {
  assert(None === __)
}

......并且,在冥想之后,你意识到你应该填写这样的空白:

test("None equals None") {
  assert(None === None)
}

......然后它继续进行下一次单元测试.

不过,我的问题是这个===运算符是什么?我似乎无法在任何地方找到它.这是Scala Koans项目本身定义的DSL运营商吗?或者它是ScalaTest框架的一部分?或者在Scala中?

scala scalatest scala-2.9

52
推荐指数
1
解决办法
2万
查看次数

有没有办法在for comprehension中声明一个隐含的val?

我有一些代码嵌套调用flatMap,如下所示:

foo.flatMap(implicit f => bar(123).flatMap(b =>
  /* and so on... implicit f is still in scope here.*/
))
Run Code Online (Sandbox Code Playgroud)

通常,人们会将其写为理解,这使得代码更具可读性:

for {
  f <- foo
  b <- bar(123)
  /* yet more method calls that need f as an implicit parameter*/
}
Run Code Online (Sandbox Code Playgroud)

但我需要f暗示,我不认为有办法用于理解.在那儿?当然我可以明确地传递f,但这意味着再见DSL.我对Scala 2.9和2.10的答案感兴趣.

为了清楚起见,我想做这样的事情,但它不会编译:

for {
  implicit f <- foo
  b <- bar(123) //bar takes implicit argument
  /* yet more method calls that need f as an implicit parameter*/
}
Run Code Online (Sandbox Code Playgroud)

编辑:也许一个功能请求是一个好主意?

EDIT2:这应该适用于所有可以用于理解的类型,因此不仅仅是通常的集合类型,如ListSeq,还有Future …

scala implicit for-comprehension scala-2.9 scala-2.10

27
推荐指数
3
解决办法
2491
查看次数

SBT包括程序中的版本号

我想要一个我正在构建的程序,以便能够在运行时报告自己的版本(例如scala myprog.jar --version).传统上在maven项目中,我使用资源过滤(pom.xml - > file.properties - >在运行时读取值).我知道有sbt-filter-plugin来模仿这个功能,但我很好奇是否有更标准/首选/聪明的方法在SBT中这样做.

tl; dr如何读取build.sbt运行时定义的版本号?

scala sbt scala-2.9

22
推荐指数
3
解决办法
8115
查看次数

如何为Scala 2.9并行集合替换fork连接池?

我一直在寻找新的Scala 2.9并行系列,我希望放弃一大堆类似东西的狡猾的业余版本.特别是,我想用自己的东西替换默认实现基础的fork join pool(例如,通过actor分配网络任务评估的东西).我的理解是,这只是应用Scala的"可堆叠修改"范式的问题,但是集合库非常令人生畏,我不确定哪些位需要修改!

一些具体问题:

  1. 标准并行实现通过代码中的fork连接池进行交互是否正确ForkJoinTasks
  2. 我看到有另一种特质,FutureThreadPoolTasks.我如何构建一个使用这个特性的集合而不是ForkJoinTasks
  3. 我是否可以编写另一个替代方法(也许是一个混合的相应样板类,AdaptiveWorkStealingTasks并以某种方式实例化使用这个新特征的集合实例?

(作为参考,上面提到的所有特征都在Tasks.scala中定义.)

特别是代码示例非常受欢迎!

parallel-processing scala scala-2.9 parallel-collections

19
推荐指数
2
解决办法
1637
查看次数

Scala 2.9将添加哪些新功能?

我知道并行集合将可用.

这些将采取什么形式,我们还有什么可能看到的?

scala scala-2.9

18
推荐指数
2
解决办法
2731
查看次数

在sbt项目的类路径中添加tools.jar

scala 2.9.1控制台中的':javap'命令需要'classpath'中的tools.jar(来自JDK6).从cmd-line可以使用'-cp'参数或CLASSPATH环境变量来完成.

如何对使用'console'和'console-quick'命令从SBT调用的scala控制台执行相同的操作?

scala javap sbt scala-2.9

18
推荐指数
2
解决办法
7108
查看次数

如何在测试规范中修复参数ta:TildeArrow的缺失隐式值

我正在使用一个简单的测试规范使用喷雾,我无法正确编译,不知道我做错了什么.我的scala版本是2.9.3并且喷涂1.0.1(更新其中任何一个都不是合适的选项).这是我的测试规范代码:

import org.specs2.mutable.Specification
import spray.testkit.Specs2RouteTest
import spray.http._
import akka.util.Duration
import java.util.concurrent.TimeUnit

import service.MyProxy

abstract class MyTestSpec extends Specification with Specs2RouteTest with MyProxy{

  val duration = Duration(30, TimeUnit.SECONDS)
  implicit val routeTestTimeout = RouteTestTimeout(duration)

  "MyProxy" should {

    "return a json for GET requests to the /api/getclass/classCode path for a regular request" in {
      Get("/api/getclass/123/") ~> myRoutes~> check {
        responseAs[String] must contain("classCode")
        contentType === ContentTypes.`application/json`
      }
    }

  } // end should...
} //end class
Run Code Online (Sandbox Code Playgroud)

我在运行测试时遇到此错误.

[error] C:\Users\Desktop\Project\MyTestSpec.scala:23: could not find implicit value for …
Run Code Online (Sandbox Code Playgroud)

routing scala scala-2.9 spray spray-test

17
推荐指数
2
解决办法
3622
查看次数

使用递归的scala中的硬币更改算法

我试图使用递归编程Scala中的硬币更改问题.我写的代码如下.

def countChange(money: Int, coins: List[Int]): Int = {
  def ways(change: List[Int], size: Int, capacity: Int): Int = {
    if(capacity == 0) 1
    if((capacity < 0) || (size <= 0)) 0

    //println and readLine to check and control each recursive call.

    println("calling ways(",change, change.length-1, capacity,") + ways(",change,   change.length, capacity - change(change.length - 1),")")
    readLine()
    //

    ways(change, change.length-1, capacity) + ways(change, change.length, capacity - change(change.length - 1))
  }
  ways(coins, coins.length, money)
}
Run Code Online (Sandbox Code Playgroud)

在运行代码时,它不会终止并继续调用第一个递归调用.我哪里错了?

scala scala-2.9

15
推荐指数
4
解决办法
3万
查看次数

Scala Parallel Collections-如何提前返回?

我有一个可能的输入值列表

val inputValues = List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我有一个非常长的计算功能,给我一个结果

def reallyLongFunction( input: Int ) : Option[String] = { ..... }
Run Code Online (Sandbox Code Playgroud)

使用scala并行集合,我可以很容易地做到

inputValues.par.map( reallyLongFunction( _ ) )
Run Code Online (Sandbox Code Playgroud)

为了得到所有结果,并行.问题是,我真的不想要所有的结果,我只想要FIRST的结果.一旦我的一个输入成功,我想要我的输出,并希望继续我的生活.这做了很多额外的工作.

那么我如何才能充分利用这两个世界呢?我想要

  1. 获取第一个返回我的long函数的结果
  2. 从无用的工作中停止我所有的其他线程.

编辑 - 我解决它就像一个愚蠢的java程序员一样

@volatile var done = false;
Run Code Online (Sandbox Code Playgroud)

在我的内部设置和检查reallyLongFunction.这有效,但感觉不太scala.想要一个更好的方法来做到这一点....

parallel-processing scala scala-2.9

14
推荐指数
1
解决办法
968
查看次数