Tag: scala

中止提前

什么是尽早终止弃牌的最好方法? 作为一个简单的例子,想象一下我想总结一个Iterable的数字,但是如果遇到我不期待的事情(比如奇数),我可能想要终止。 这是第一个近似值 def sumEvenNumbers(nums: Iterable[Int]): Option[Int] = { nums.foldLeft (Some(0): Option[Int]) { case (Some(s), n) if n % 2 == 0 => Some(s + n) case _ => None } } 然而,这个解决scheme是相当丑陋的(比如,如果我做了一个.foreach和一个返回 – 它会更清晰和更清晰),最糟糕的是,它遍历整个迭代,即使遇到一个非偶数。 那么写这样一个折叠的最好方法是什么? 我应该去recursion地写这个,还是有一个更可接受的方法?

FP和OO是正交的吗?

我已经一次又一次地听到了,我正试图理解和validationFP和OO是正交的。 首先,两个概念是正交的意味着什么? FP鼓励尽可能的不变性和纯洁性,而OO似乎是为了状态和变异而build立的 – 一个稍微有组织的命令式编程版本? 我意识到对象可以是不可改变的,但是OO似乎意味着对我的状态/改变。 他们看起来像对立面。 这如何影响它们的正交性? 像Scala这样的语言可以很容易地做OO和FP,这是否会影响两种方法的正交性?

Scala中的“新”关键字

我有一个非常简单的问题 – 我们应该在Scala中创build对象时何时应用new关键字? 是否当我们只尝试实例化Java对象?

用IntelliJ设置scala

我有Intellij极限11.1,安装了scala插件。 我使用自制软件安装了scala 2.9.2, /usr/local/Cellar/scala/2.9.2> >which scala /usr/local/bin/scala >scala -version Scala code runner version 2.9.2 — Copyright 2002-2011, LAMP/EPFL 创build一个新的Java模块项目,我得到这个: 有人可以帮我解决这些问题,为什么scala插件没有使这个工作成为可能? 🙂

斯卡拉的“魔术”function列表

我在哪里可以find一个斯卡拉的“魔术”function,如apply ,不apply , update , +=等列表? 例如,magic-functions是指编译器的某些语法糖所使用的函数 o.update(x,y) <=> o(x) = y 我GOOGLE了一些scala magic和functions同义词的组合,但是我没有find任何东西。 我对标准库中魔术函数的使用不感兴趣,但是其中存在魔术函数。

如何等待几个期货

假设我有几个未来,需要等到他们中的任何一个失败或者全部成功。 例如:假设有3个期货: f1 , f2 , f3 。 如果f1成功, f2失败,我不等f3 (并返回失败的客户端)。 如果f2在f1和f3仍在运行时失败,我不等它们(并返回失败 ) 如果f1成功,然后f2成功,我继续等待f3 。 你将如何实现它?

我如何sortingScala中的数组?

我可以看到有一个sorting对象, Sorting ,使用quickSort方法quickSort 。 什么是使用它的代码示例,sorting任意types的对象的数组? 看起来我需要传递Orderable特性的实现,但是我不确定语法。 此外,我更喜欢这样做的“斯卡拉方式”的答案。 我知道我可以使用Java库。

Scala:将元素追加到数组的最佳方式是什么?

说我有一个Array[Int]像 val array = Array( 1, 2, 3 ) 现在我想追加一个元素到数组中,比如4 ,如下例所示: val array2 = array + 4 // will not compile 我当然可以使用System.arraycopy() ,并自己做这个,但是必须有一个Scala库函数,这是我根本找不到的。 感谢任何指针! 笔记: 我知道我可以追加另一个元素数组,如下面的代码,但是看起来太圆了: val array2b = array ++ Array( 4 ) // this works 我知道列表与数组的优点和缺点,在这里我出于各种各样的原因,特别感兴趣的扩展数组。 编辑1 感谢指向:+运算符方法的答案。 这是我正在寻找的。 不幸的是,它比使用arraycopy的自定义append()方法实现要慢 – 约慢两到三倍。 看SeqLike[]中的实现,创build一个构build器,然后将数组添加到其中,然后通过构build器完成追加,然后构build器被呈现。 不是一个好的数组实现。 我做了一个比较两种方法的快速基准,看十个周期中最快的时间。 做一千万重复的单项附加到某个类Foo一个8元素数组实例需要3.1秒, :+和1.7秒与一个简单的append()方法,使用System.arraycopy(); Long的8元素数组中执行1000万个单项追加重复操作需要2.1秒, :+和0.78秒的简单append()方法。 不知道如果这不能在Array库中定制的Array自定义实现? 编辑2 值得一提的是,我提交了一张票: https […]

在Scala中的显式types转换

比方说,我有以下代码: abstract class Animal case class Dog(name:String) extends Animal var foo:Animal = Dog("rover") var bar:Dog = foo //ERROR! 如何修复这段代码的最后一行? 基本上,我只想做什么,用C语言来完成: var bar:Dog = (Dog) foo

如何在Scala中按两个字段sorting列表?

如何在Scala中对两个字段进行sorting,在这个例子中,我将按lastName和firstNamesorting? case class Row(var firstName: String, var lastName: String, var city: String) var rows = List(new Row("Oscar", "Wilde", "London"), new Row("Otto", "Swift", "Berlin"), new Row("Carl", "Swift", "Paris"), new Row("Hans", "Swift", "Dublin"), new Row("Hugo", "Swift", "Sligo")) rows.sortBy(_.lastName) 我尝试这样的事情 rows.sortBy(_.lastName + _.firstName) 但它不起作用。 所以我对一个好的和简单的解决scheme感到好奇。 提前致谢! 猩猩