Tag: 斯卡拉

如何限制演员消息到特定的types?

在Akka中 ,除了使用使用RPC风格的编程模型的“Typed Actor”API之外,有没有办法将消息限制为actor的特定静态types? 我可以在Akka上使用消息传递风格,而不需要在actor边界处抛弃静态types安全吗? 例如,我想使用这样的代码: sealed abstract class FooMessage case object Foo extends FooMessage case object Bar extends FooMessage class FooActor extends Actor[FooMessage] { def receive = { case Foo => () // OK // Would raise a compiler error: // case s: String => error("Can't happen, String is not a subtype of FooMessage") } […]

使用scala构造函数来设置trait中定义的variables

如果我理解正确,特征是最接近的Java接口和类构造函数自动设置variables。 但是如果我有一个扩展特性的类,并且有一个构造函数从特性中设置一个variables,那么如果是这样的话: trait Foo { var foo: String } class Bar (foo: String) extends Foo { /* … */ } 当我制作一个Bar对象的时候,我想让这个特质的foostring被设置。 编译器似乎给了我这个错误。 什么是实现这一目标的正确方法?

Spray,Akka-http和Play,这是新的HTTP / REST项目的最佳select

我将使用Scala和Akka Actor来开发新的HTTP / REST服务。 我有使用Play的经验,但是我并不需要一个完整的Web框架。 从我读到的,我认为喷雾是一个合适的select。 我的问题来自于新到达的AKKA-HTTP之后Spray的未来。 Spray项目是否将独立于Akka-HTTP项目发展,还是两个项目将合并成一个Akka-HTTTP? 如果我开始使用Spray进行开发,这会带来什么影响? 另外我读了Play将整合AKKA-HTTP。 所以我终于想知道是不是应该玩Play? 谢谢你的帮助。

scala – 最小/最大与选项可能是空的Seq?

我正在做一些Scala体操,在那里我尝试着find“最小”的元素。 这就是我现在所做的: val leastOrNone = seq.reduceOption { (best, current) => if (current.something < best.something) current else best } 它工作正常,但我不是很满意 – 这样一个简单的事情有点长, 我不太在乎“如果” 。 使用minBy会更加优雅: val least = seq.minBy(_.something) …但min和minBy在序列为空时抛出exception。 有没有一种习惯的,更优雅的方式find一个可能的空列表中最小的元素作为一个Option ?

将A => M 变成M

对于单子M ,是否可以将A => M[B]变成M[A => B] ? 我已经尝试过这种types无济于事了,这让我觉得这是不可能的,但我想我会问。 而且,在Hooglesearcha -> mb -> m (a -> b)没有返回任何东西,所以我不会很幸运。

java能运行一个编译好的scala代码吗?

可以命令java运行一个编译的Scala代码? 如果是这样,为什么我们有一个独家命令scala ?

如何在Scala中使用/引用布尔函数的否定?

我想在Scala中使用布尔函数的否定,比如: def someFunction(x: Set, p: Int => Boolean): Boolean = someOtherFunction(x, !p) 但是我得到的错误: value unary_! is not a member of Int => Boolean 我怎样才能提到p的否定?

扩展scala case类而不会不断重复构造函数vals?

有没有办法扩展一个案例class级,而不是一路拾起新的vals? 例如,这不起作用 case class Edge(a:Strl, b:Strl) case class EdgeQA(a:Strl, b:Strl, right:Int, asked:Int ) extends Edge(a,b) “a”与“a”冲突,所以我不得不重新命名为a1。 但我不想要各种额外的“a”公开的副本,所以我把它变成了私人的。 case class Edge(a:Strl, b:Strl) case class EdgeQA(private val a1:Strl, private val b1:Strl, right:Int, asked:Int ) extends Edge(a,b) 这只是对我来说似乎不干净..我错过了什么?

斯卡拉foreach奇怪的行为

我想在Scala中使用一个漂亮的单线程迭代一个值列表。 例如,这个效果很好: scala> val x = List(1,2,3,4) x: List[Int] = List(1, 2, 3, 4) scala> x foreach println 1 2 3 4 但是,如果我使用占位符_ ,它给了我一个错误: scala> x foreach println(_ + 1) <console>:6: error: missing parameter type for expanded function ((x$1) =>x$1.$plus(1)) x foreach println(_ + 1) ^ 这是为什么? 编译器不能在这里推断types?

语法糖:_ *用于将Seq作为方法参数

我只是注意到这个构造在Web上的某个地方: val list = List(someCollection: _*) _*是什么意思? 这是一个方法调用的语法糖吗? 我的自定义类应该满足什么约束,以便它可以利用这个语法糖?