小编oxb*_*kes的帖子

Scala和接口

Java我通常会将我的整个域声明为interfaces,可能有一些Factory让我实现.这部分是因为我太老了我记得当一些持久层需要实现类来子类化特定类时,我也可以轻松地:

  • 用于测试目的的模拟对象
  • 必要时在运行时代理对象
  • 提供不同的实现

即使我没有真正想到我真的想要做上述任何一项,我也会遵循这种做法; 为了以防万一,我仍然认为这是一种很好的做法.我认为这是一种相当常见的方法.

如果我声明所有域对象,这在Scala-land中会不常见abstract吗?对于Scala,以上几点也适用吗?

java scala interface

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

Scala集合标准实践

来自一个Java背景,我已经习惯了处理集合的常见做法:显然会有异常,但通常代码看起来像:

public class MyClass {
  private Set<String> mySet;

  public void init() {
    Set<String> s = new LinkedHashSet<String>();
    s.add("Hello");
    s.add("World"); 
    mySet = Collections.unmodifiableSet(s);
  }
}
Run Code Online (Sandbox Code Playgroud)

我不得不承认,我对Scala中的众多选项感到有些困惑.有:

  • scala.List(和Seq)
  • scala.collections.Set(和Map)
  • scala.collection.immutable.Set(而且Map,Stack不是List)
  • scala.collection.mutable.Set(而且Map,Buffer不是List)
  • scala.collection.jcl

所以问题!

  1. 为什么List并且Seq在包中定义scala而不是 scala.collection(尽管实现Seq是在集合子包​​中)?
  2. 初始化集合然后冻结它的标准机制是什么(在Java中是通过包装来实现的unmodifiable)?
  3. 为什么某些集合类型(例如MultiMap)仅定义为可变?(没有不可改变的MultiMap)?

我读过Daniel Spiewak 关于scala集合精彩系列 …

java scala scala-collections

31
推荐指数
2
解决办法
9447
查看次数

Scala的存在类型和Java的通配符之间的区别是什么?

比Stack Overflow问题更具体一点什么是存在类型?,Scala的存在类型和Java的通配符之间有什么区别,特别是有一些说明性的例子?

在迄今为止我见过的所有内容中,它们似乎都相当.

一些参考文献.马丁奥德斯基提到了他们 ; 谷歌对我的问题最为重要:

MO:原始的通配符设计......受到存在主义类型的启发.实际上,原始论文在存在类型中具有编码.但是当实际的最终设计出现在Java中时,这种联系就失去了一点点

java type-systems scala existential-type bounded-wildcard

30
推荐指数
4
解决办法
6835
查看次数

测试期权价值的更好方法是什么?

我经常发现自己有一种Option[T]类型,T并希望测试选项的价值对某些价值.例如:

val opt = Some("oxbow")
if (opt.isDefined && opt.get == "lakes") 
   //do something
Run Code Online (Sandbox Code Playgroud)

以下代码是等效的,并删除了测试选项值是否存在的要求

if (opt.map(_ == "lakes").getOrElse(false))
 //do something
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说似乎不太可读.其他可能性是:

if (opt.filter(_ == "lakes").isDefined)

if (opt.find(_ == "lakes").isDefined) //uses implicit conversion to Iterable
Run Code Online (Sandbox Code Playgroud)

但我不认为这些明确表达的意图要么更好,因为:

if (opt.isDefinedAnd(_ == "lakes"))
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的方法来做这个测试?

scala code-readability option

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

Scala actor可以同时处理多条消息吗?

回复到我最近的问题表明,一个演员处理其消息一次一个.这是真的?我没有看到任何明确说明(在Scala编程),其中包含以下代码段(第593页)

如果[ react方法]找到可以处理的消息,[it]将调度该消息的处理以便以后执行并抛出异常

(强调我自己).两个相关(和互斥)的问题:

  1. 假设演员可以同时处理多个消息,我怎样才能强制演员一次处理消息1(如果这是我想做的话)?(用receive?)
  2. 假设一个actor一次处理一个消息,我怎样才能最好地实现一个实际上可以同时处理消息的actor

编辑:做一些测试似乎证明我错了,演员确实是连续的.所以问题#2我需要回答

concurrency scala actor

28
推荐指数
2
解决办法
5178
查看次数

Scala,未来的Java(?)

我试图找出scala的受欢迎程度以及有多少SO用户在工作场所实际使用它?

java scala

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

元组参数声明和赋值奇数

我可以按如下方式分配一个元组:

var (min, max) = (1, 2)
Run Code Online (Sandbox Code Playgroud)

但我不能再重新分配如下

(min, max) = (1, 3) //compiler error: ';' expected but '=' found
Run Code Online (Sandbox Code Playgroud)

相反,我似乎必须这样做:

min = 1
max = 3
Run Code Online (Sandbox Code Playgroud)

为什么后者不起作用而前者不起作用?

syntax scala tuples

27
推荐指数
1
解决办法
1930
查看次数

Scala 2.8 CanBuildFrom

继我提出的另一个问题,Scala 2.8突破之后,我想了解更多关于Scala方法的信息,TraversableLike[A].map其签名如下:

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

请注意有关此方法的一些事项:

  • 它需要一个功能A,将遍历中的每个转换为a B.
  • 它返回That并采用类型的隐式参数CanBuildFrom[Repr, B, That].

我可以这样称呼如下:

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

什么我不能很好地领会是怎么说的事实That必然B(即,它是B的一些集合)是由编译器执行.类型参数看起来独立于上面的签名和特征CanBuildFrom本身的签名:

trait CanBuildFrom[-From, -Elem, +To]
Run Code Online (Sandbox Code Playgroud)

Scala编译器如何确保That不会强制进入没有意义的东西?

> val s: Set[String] = List("Paris", "London").map(_.length) //will not compile
Run Code Online (Sandbox Code Playgroud)

编译器如何确定CanBuildFrom调用范围内的隐式对象是什么?

generics scala scala-2.8

27
推荐指数
1
解决办法
6163
查看次数

在Scala中,有没有办法将两个列表转换为Map?

我有两个列表,a List[A]和a List[B].我想要的是一个,Map[A,B]但我想要的语义zip.所以从这样开始:

var tuplesOfAB = listOfA zip listOfB
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何构建一个Map来自我的tuplesOfAB.

作为一个后续问题,我也想反转我的地图,以便从Map[A,B]我可以创建一个Map[B,A].任何人都可以用线索打我吗?

scala tuples list map scala-2.8

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

关于来自Rubyist的Scala的问题

我最近一直在四处寻找在业余时间学习一门新语言,而Scala似乎非常有吸引力.

我有几个问题:

  1. 不知道Java在学习方面有什么挑战吗?以后这会是一个很大的劣势吗?(即人们多久依赖特定于Java的库?)

  2. 与Ruby相比有多大的不同?(除了静态类型)它是否引入了许多新术语,还是我熟悉大多数语言的机制?

  3. 你会推荐什么资源?我有我的眼睛Programming ScalaBeginning Scala书本

  4. 虽然主观,Scala有趣的程序吗?:P

谢谢

ruby scala scala-2.8

27
推荐指数
4
解决办法
2180
查看次数