标签: scala-collections

Scala 2.8馆藏图书馆是"历史上最长的遗书"吗?

我刚刚开始研究即将发布的2.8版本中的Scala集合库重新实现.熟悉2.7中的库的人会注意到,从使用角度来看,库几乎没有变化.例如...

> List("Paris", "London").map(_.length)
res0: List[Int] List(5, 6)
Run Code Online (Sandbox Code Playgroud)

......适用于任何一个版本.图书馆非常实用:实际上它太棒了.然而,那些以前不熟悉Scala并且想要了解语言的人现在必须理解方法签名,例如:

def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
Run Code Online (Sandbox Code Playgroud)

对于这样简单的功能,这是一个令人生畏的签名,我发现自己很难理解.并不是说我认为Scala有可能成为下一个Java(或/ C/C++/C#) - 我不相信它的创建者会瞄准那个市场 - 但我认为Scala成为/当然是可行的下一个Ruby或Python(即获得重要的商业用户群)

  • 这会让人们去Scala吗?
  • 这是否会让Scala在商业世界中成为一个不好的名字,作为学术玩具,只有专门的博士生才能理解?被CTO S和软件的负责人会感到害怕了吗?
  • 图书馆重新设计了一个明智的想法吗?
  • 如果您在商业上使用Scala,您是否担心这一点?您是打算立即采用2.8还是等待看看会发生什么?

Steve Yegge 曾经因为他过于复杂的类型系统而攻击Scala(在我看来是错误的).我担心有人会在这个API上传播FUD(类似于Josh Bloch如何通过向Java添加闭包来吓唬JCP).

注意 - 我应该清楚,虽然我相信约书亚布洛赫在拒绝BGGA关闭提案方面具有影响力,但我并没有将此归因于他诚实地认为提案代表错误的其他信息.


尽管我的妻子和同事一直在告诉我,我不认为我是一个白痴:我在牛津大学获得了很好的数学学位,而且我已经在商业方面进行了近12年的编程,并在斯卡拉进行了大约一年(也是商业上).

请注意,炎症主题标题是关于 20世纪80年代早期英国政党宣言的引文.这个问题是主观的,但这是一个真实的问题,我已经成为CW,我想就此事提出一些意见.

scala scala-2.8 scala-collections

865
推荐指数
16
解决办法
11万
查看次数

Scala 2.8 breakOut

在Scala 2.8中,有一个对象scala.collection.package.scala:

def breakOut[From, T, To](implicit b : CanBuildFrom[Nothing, T, To]) =
    new CanBuildFrom[From, T, To] {
        def apply(from: From) = b.apply() ; def apply() = b.apply()
 }
Run Code Online (Sandbox Code Playgroud)

我被告知这会导致:

> import scala.collection.breakOut
> val map : Map[Int,String] = List("London", "Paris").map(x => (x.length, x))(breakOut)

map: Map[Int,String] = Map(6 -> London, 5 -> Paris)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么breakOut被称为我的论据List

scala scala-2.8 scala-collections

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

Scala中的JavaConverters和JavaConversions之间有什么区别?

scala.collection,有两个非常相似的对象JavaConversionsJavaConverters.

  • 这两个对象有什么区别?
  • 为什么它们都存在?
  • 我什么时候想要使用其中一个?

scala scala-java-interop scala-collections

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

我什么时候应该在Scala中选择Vector?

似乎VectorScala收集派对迟到了,所有有影响力的博客帖子已经离开了.

在Java中ArrayList是默认的集合 - 我可能会使用,LinkedList但只有当我通过算法并且足够小心地进行优化时才会使用.在Scala中,我应该使用Vector我的默认设置Seq,还是尝试在List实际上更合适时使用?

scala vector scala-collections

186
推荐指数
4
解决办法
5万
查看次数

缩小,折叠或扫描(左/右)?

什么时候应该使用reduceLeft,reduceRight,foldLeft,foldRight,scanLeftscanRight

我想要一个直觉/概述他们的差异 - 可能有一些简单的例子.

reduce scala fold scala-collections

177
推荐指数
3
解决办法
7万
查看次数

Scala将Collection转换为按键映射的最佳方法是什么?

如果我有一个集合c型的T,有一个属性pT(类型P,说的),什么是做一个最好的办法地图通过提取键

val c: Collection[T]
val m: Map[P, T]
Run Code Online (Sandbox Code Playgroud)

一种方法如下:

m = new HashMap[P, T]
c foreach { t => m add (t.getP, t) }
Run Code Online (Sandbox Code Playgroud)

但现在我需要一个可变的地图.有没有更好的方法来做到这一点,以便它在一行,我最终得到一个不可变的地图?(显然我可以将上面的内容变成一个简单的库实用程序,就像在Java中一样,但我怀疑在Scala中没有必要)

scala map scala-collections

153
推荐指数
7
解决办法
13万
查看次数

Stream vs Views vs Iterators

scala中的Streams,Views(SeqView)和迭代器之间有什么区别?这是我的理解:

  • 他们都是懒惰的名单.
  • Streams缓存值.
  • 迭代器只能使用一次?你不能回到开始并再次评估价值?
  • View的值不会被缓存,但您可以反复评估它们?

所以,如果我想节省堆空间,我应该使用迭代器(如果我不再遍历列表)或视图?谢谢.

scala scala-collections

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

scala中Array和List之间的区别

在什么情况下我应该使用Array(Buffer)和List(Buffer).我所知道的唯一区别是数组是非变量的,列表是协变的.但是性能和其他一些特性呢?

arrays scala list scala-collections

129
推荐指数
3
解决办法
6万
查看次数

如何从Scala中的资源文件夹中读取文件?

我有一个像下面的文件夹结构:

- main
-- java
-- resources 
-- scalaresources
--- commandFiles 
Run Code Online (Sandbox Code Playgroud)

在那个文件夹中,我有我必须阅读的文件.这是代码:

def readData(runtype: String, snmphost: String, comstring: String, specificType:  String): Unit = {
  val realOrInvFile = "/commandFiles/snmpcmds." +runtype.trim // these files are under commandFiles folder, which I have to read. 
    try {
      if (specificType.equalsIgnoreCase("Cisco")) {
        val specificDeviceFile: String = "/commandFiles/snmpcmds."+runtype.trim+ ".cisco"
        val realOrInvCmdsList = scala.io.Source.fromFile(realOrInvFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
          //some code 
        }
        val specificCmdsList = scala.io.Source.fromFile(specificDeviceFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
          //some code
        }
      }
    } catch {
      case e: Exception => e.printStackTrace
    } …
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

97
推荐指数
4
解决办法
10万
查看次数

Scala:Scala集合中的Traversable和Iterable特性有什么区别?

我已经看过这个问题,但仍然不理解Iterable和Traversable特征之间的区别.谁能解释一下?

scala scala-collections

95
推荐指数
3
解决办法
2万
查看次数