Tag: 斯卡拉

为什么Scala为每个列表提供多个参数列表和多个参数?

多个参数列表,例如def foo(a:Int)(b:Int) = {}和每个列表多个参数,例如def foo(a:Int, b:Int) = {}在语义上是等价的,大多数函数式语言只有一种声明多个参数的方法,例如F#。 我可以找出支持这两种函数定义的唯一原因就是允许使用只有一个参数的参数列表进行语法扩展。 def withBufferedWriter(file: File)(block: BufferedWriter => Unit) 现在可以用语法来调用 withBufferedWriter(new File("myfile.txt")) { out => out write "whatever" … } 但是,也可以有其他方法来支持使用大括号,而不需要多个参数列表。 一个相关的问题:为什么在Scala中使用多个参数列表叫做“currying”? 柯里化通常被定义为为了支持部分应用而使得n元函数一元化的技术。 然而,在Scala中,可以部分应用一个函数,而不用创build一个“curried”(多个参数列表,每个参数都有一个参数)版本的函数。

斯卡拉双打和精度

有一个函数可以截断或舍入Double吗? 在我的代码中的一点,我想要一个数字,如: 1.23456789四舍五入到1.23

抽象类与特质之间的区别

可能重复: 斯卡拉的特质与抽象类 抽象类和特征之间的概念区别是什么?

三元运算符类似于?:

我试图避免像这样的结构: val result = this.getClass.getSimpleName if (result.endsWith("$")) result.init else result 好的,在这个例子中, then和else分支很简单,但是可以复杂的图像。 我build立了以下内容: object TernaryOp { class Ternary[T](t: T) { def is[R](bte: BranchThenElse[T,R]) = if (bte.branch(t)) bte.then(t) else bte.elze(t) } class Branch[T](branch: T => Boolean) { def ?[R] (then: T => R) = new BranchThen(branch,then) } class BranchThen[T,R](val branch: T => Boolean, val then: T […]

在Scala中,如何从列表中删除重复项?

假设我有 val dirty = List("a", "b", "a", "c") 是否有一个列表操作返回“a”,“b”,“c”

为什么在一个空string上“分裂”返回一个非空数组?

在空string上拆分将返回大小为1的数组: scala> "".split(',') res1: Array[String] = Array("") 考虑到这将返回空数组: scala> ",,,,".split(',') res2: Array[String] = Array() 请解释 :)

Akka如果抛出exception,Actor不会终止

我目前正试图开始与阿卡,我面临一个奇怪的问题。 我的演员有以下代码: class AkkaWorkerFT extends Actor { def receive = { case Work(n, c) if n < 0 => throw new Exception("Negative number") case Work(n, c) => self reply n.isProbablePrime(c); } } 这就是我开始工作的方式: val workers = Vector.fill(nrOfWorkers)(actorOf[AkkaWorkerFT].start()); val router = Routing.loadBalancerActor(SmallestMailboxFirstIterator(workers)).start() 这就是我如何closures一切: futures.foreach( _.await ) router ! Broadcast(PoisonPill) router ! PoisonPill 现在会发生什么,如果我发送工作人员消息与n> 0(没有例外抛出),一切工作正常,应用程序正常closures。 但是,只要我发送一条消息导致exception,应用程序就不会终止,因为仍然有一个actor正在运行,但我无法弄清楚它来自哪里。 如果有帮助,这是所讨论的线程的堆栈: […]

包对象

什么是包对象,不是这个概念,而是它们的用法? 我试图得到一个工作的例子,我得到的唯一的工作如下: package object investigations { val PackageObjectVal = "A package object val" } package investigations { object PackageObjectTest { def main(args: Array[String]) { println("Referencing a package object val: " + PackageObjectVal) } } } 我到目前为止的观察结果是: package object _root_ { … } 是不允许的(这是合理的), package object xy { … } 也被禁止。 看来,一个包对象必须在直接父包中声明,如果按照上面的方式写,则需要用括号分隔的包声明表单。 他们是共同使用? 如果是这样,怎么样?

什么devise决定会赞成Scala的Actor而不是JMS?

使用Scala Actor而不是JMS有什么不同? 例如,从性能和可伸缩性的angular度来看,Scala Actor模型与JMS相比有哪些增加? 在哪些情况下,使用Actor而不是JMS更有意义,即,Actors解决JMS无法解决的问题是什么?

什么时候更高的亲属types有用?

我一直在F#开发一段时间,我喜欢它。 但是我知道F#中不​​存在的一个stream行词是高级types。 我已经阅读了更高版本的材料,我想我理解他们的定义。 我只是不知道为什么他们有用。 有人可以提供一些在Scala或Haskell中更高级的types变得容易的例子,需要F#中的解决方法吗? 同样对于这些例子,如果没有更高版本的types(或者F#中的反过来),变通方法是什么? 也许我只是习惯于解决这个问题,我没有注意到这个function的缺失。 (我想)我得到的,而不是myList |> List.map f或myList |> Seq.map f |> Seq.toList更高kindedtypes允许您只需编写myList |> map f ,它会返回一个List 。 这很好(假设它是正确的),但似乎有点小气? (并不能简单地通过允许函数重载?)我通常转换为Seq ,然后我可以转换为任何我想要的事情。 再次,也许我太习惯于解决它了。 但是有没有什么例子可以让更高级的types真正的节省你的击键和types安全?