小编oxb*_*kes的帖子

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万
查看次数

LINQ中最难或最容易被误解的方面是什么?

背景:在接下来的一个月里,我将进行三次谈话,或者至少包括LINQ在上下文中C#.我想知道哪些主题值得给予相当多的关注,基于人们可能会发现难以理解的内容,或者他们可能会错误地认为什么.我不会特别谈论LINQSQL或实体框架除了作为如何查询可以远程使用表达式树(通常被执行的例子IQueryable).

那么,你发现了LINQ什么?你在误解方面看到了什么?示例可能是以下任何一种,但请不要限制自己!

  • C#编译器如何处理查询表达式
  • Lambda表达式
  • 表达树
  • 扩展方法
  • 匿名类型
  • IQueryable
  • 延期与立即执行
  • 流式传输与缓冲执行(例如,OrderBy延迟但缓冲)
  • 隐式输入的局部变量
  • 阅读复杂的通用签名(例如Enumerable.Join)

c# linq c#-3.0

282
推荐指数
23
解决办法
5万
查看次数

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将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万
查看次数

为什么示例不编译,又如何(共同,反向和反向)方差有效?

这个问题之后,有人可以在Scala中解释以下内容:

class Slot[+T] (var some: T) { 
   //  DOES NOT COMPILE 
   //  "COVARIANT parameter in CONTRAVARIANT position"

}
Run Code Online (Sandbox Code Playgroud)

我明白之间的区别+T,并T在类型声明(它编译如果我使用T).但是,如何实际编写一个在其类型参数中具有协变性的类而不依赖于创建未参数化的东西?如何确保只能使用实例创建以下内容T

class Slot[+T] (var some: Object){    
  def get() = { some.asInstanceOf[T] }
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 现在得到以下内容:

abstract class _Slot[+T, V <: T] (var some: V) {
    def getT() = { some }
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我现在有两个类型参数,我只想要一个.我会再问这个问题:

如何编写一个在其类型中具有协变性不可变 Slot类?

编辑2:呃!我用过var而不是val.以下是我想要的:

class Slot[+T] (val some: …
Run Code Online (Sandbox Code Playgroud)

generics scala covariance contravariance

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

146
推荐指数
7
解决办法
12万
查看次数

Scala的路径依赖类型是什么意思?

我听说Scala有路径依赖类型.这与内部阶级有关,但这实际意味着什么,为什么我关心?

type-systems scala path-dependent-type

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

Java:如何将HashMap <String,Object>转换为数组

我需要将a转换HashMap<String, Object>为数组; 有谁能告诉我它是如何完成的?

java arrays collections hashmap

110
推荐指数
8
解决办法
27万
查看次数

我为什么要关心Java没有具体化的泛型?

这是我最近在一次采访中提出的一个问题,即候选人希望看到添加到Java语言中的问题.它通常被认为是一种痛苦,Java没有具体化的仿制药,但是,当被推动时,候选人实际上无法告诉我他在那里可能取得的那些事情.

显然因为原始类型在Java中是允许的(以及不安全的检查),所以可以颠覆泛型并最终List<Integer>得到(例如)实际包含Strings.如果类型信息具体化,这显然是不可能的; 但必须有更多!

人们可以发布他们真正想要做的事情的例子,是否有可用的具体化的泛型?我的意思是,显然你可以List在运行时得到一个类型- 但是你会用它做什么?

public <T> void foo(List<T> l) {
   if (l.getGenericType() == Integer.class) {
       //yeah baby! err, what now?
Run Code Online (Sandbox Code Playgroud)

编辑:对此的快速更新,因为答案似乎主要是关注需要传入Class一个参数(例如EnumSet.noneOf(TimeUnit.class)).我正在寻找更多的东西,这是不可能的.例如:

List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();

if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
    l1.addAll(l2); //why on earth would I be doing this anyway?
Run Code Online (Sandbox Code Playgroud)

java generics reification

101
推荐指数
10
解决办法
1万
查看次数

为什么Scala的不可变Set在其类型中不协变?

编辑:根据原始答案重写这个问题

scala.collection.immutable.Set班是不是在它的类型参数不变性.为什么是这样?

import scala.collection.immutable._

def foo(s: Set[CharSequence]): Unit = {
    println(s)
}

def bar(): Unit = {
   val s: Set[String] = Set("Hello", "World");
   foo(s); //DOES NOT COMPILE, regardless of whether type is declared 
           //explicitly in the val s declaration
}
Run Code Online (Sandbox Code Playgroud)

scala set covariance scala-collections

89
推荐指数
3
解决办法
7386
查看次数