对于在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中更具体地看待同一个问题.
我来自命令式编程背景(C++,Java).我一直在探索函数式编程,特别是Scala.
纯函数式编程的一些主要原则:
尽管现代JVM对于创建对象非常有效,并且垃圾收集对于短期对象来说非常便宜,但是最小化对象创建可能更好吗?至少在并发和锁定不是问题的单线程应用程序中.由于Scala是一种混合范例,如果需要,可以选择使用可变对象编写命令式代码.但是,作为一个花了很多年时间试图重用对象并最小化分配的人.我希望对那些甚至不允许这样的思想流派有一个很好的理解.
作为一个特例,我对本教程中的 代码片段感到有些惊讶6.它有一个Java版本的Quicksort,后面是一个整洁的Scala实现.
这是我尝试对实现进行基准测试.我没有做过详细的剖析.但是,我的猜测是Scala版本较慢,因为分配的对象数是线性的(每个递归调用一个).尾调用优化是否有可能发挥作用?如果我是对的,Scala支持自我递归调用的尾调用优化.所以,它应该只是帮助它.我正在使用Scala 2.8.
public class QuickSortJ {
public static void sort(int[] xs) {
sort(xs, 0, xs.length -1 );
}
static void sort(int[] xs, int l, int r) {
if (r >= l) return;
int pivot = xs[l];
int a = l; int b = r;
while (a <= b){
while (xs[a] <= pivot) a++;
while (xs[b] > pivot) …
Run Code Online (Sandbox Code Playgroud) 我遇到过这两个术语,我对它们的理解似乎相互重叠.Flush与缓冲区一起使用,同步用于讨论文件到磁盘的持久更改.
在C中,fflush(stdin)确保清除缓冲区.并且fsync持久化将文件更改为磁盘.
如果这些概念不是普遍定义的,那就更喜欢linux,java的解释.
我发现了一个相关的帖子,但是我并没有真正回答我的问题.真的在Java中强制文件同步/刷新
还有其他问题,例如Scala:Scala集合中的Traversable和Iterable特性之间有什么区别?和我怎么会得到两个列表的平方在斯卡拉的总和?这部分地回答了这个问题.我觉得在一个地方覆盖所有这些问题是有道理的.
说,我想在每次获得ajax响应时递增计数器.我不知道使用JavaScript异步事件的并发模型.有什么想法吗 ?
我已经将javadocs(html文件)签入svn.但是,当我通过浏览器访问html文件时,它被解释为文本.我该如何解决 ?
我的sbt项目需要超过15分钟
sbt clean compile
Run Code Online (Sandbox Code Playgroud)
我在AWS上的一台强大的机器上.我相当肯定它不是cpu或互联网带宽上的资源问题.此外,我已经运行了几次这个命令,因此填充了常春藤缓存.
这是我的所有构建相关文件
/build.sbt
name := "ProjectX"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies += ("org.apache.spark" %% "spark-streaming" % "1.4.1")
.exclude("org.slf4j", "slf4j-log4j12")
.exclude("log4j", "log4j")
.exclude("commons-logging", "commons-logging")
.%("provided")
libraryDependencies += ("org.apache.spark" %% "spark-streaming-kinesis-asl" % "1.4.1")
.exclude("org.slf4j", "slf4j-log4j12")
.exclude("log4j", "log4j")
.exclude("commons-logging", "commons-logging")
libraryDependencies += "org.mongodb" %% "casbah" % "2.8.1"
//test
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"
//logging
libraryDependencies ++= Seq(
//facade
"org.slf4j" % "slf4j-api" % "1.7.12",
"org.clapper" %% "grizzled-slf4j" % "1.0.2",
//jcl (used by aws sdks) …
Run Code Online (Sandbox Code Playgroud) 我有一个具有以下字段的事件表:
event_id
event_type
event_time
Run Code Online (Sandbox Code Playgroud)
给定一个持续时间D
和一个数字k
,我需要对在任何相对持续时间窗口中发生的事件event_type
多的所有K
事件进行计数D
。这基本上需要一个关于每个事件的滑动窗口。例如,我想要所有在任何 10 分钟内活动超过 5 个事件的 event_type。
我不知道如何在没有窗口函数的情况下解决这个问题。
(我使用的是 mysql 5.6。我说的是不到 100 万行的数据集。)
昨天,这段代码让我头疼.我通过逐行读取文件来修复它.有任何想法吗 ?
即使文件中的行数大于1,while循环也似乎永远不会被执行.
val lines = Source.fromFile( new File("file.txt") ).getLines;
println( "total lines:"+lines.size );
var starti = 1;
while( starti < lines.size ){
val nexti = Math.min( starti + 10, lines.size );
println( "batch ("+starti+", "+nexti+") total:" + lines.size )
val linesSub = lines.slice(starti, nexti)
//do something with linesSub
starti = nexti
}
Run Code Online (Sandbox Code Playgroud) 这个问题特别是关于各种实现替代方案的性能和在某种程度上的简洁性。
这篇关于实现平等权利的文章让我精神焕发。我的问题特别对应于canEqual
(以确保等价关系)。
而不是重载 canEquals 方法以在层次结构中的每个类中使用 instanceOf (paramenter 的实例是编译时类)。为什么不只在顶级类中使用 isAssignableFrom(动态解析)。使代码更加简洁,您不必重载第三种方法。
虽然,这种替代方法有效。是否有任何我需要注意的性能注意事项?
enum Color {
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET;
}
class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override public boolean equals(Object other) {
boolean result = false;
if (other instanceof Point) {
Point that = (Point) other;
//Option 1
//result = (that.canEqual(this) && this.getX() == that.getX() && this.getY() == that.getY());
//Option …
Run Code Online (Sandbox Code Playgroud)