相关疑难解决方法(0)

我应该使用List [A]还是Seq [A]还是别的什么?

我正在写一个包含一些功能性方法的类.首先,我使用List作为参数和返回类型编写它们.然后我想"嘿,你也可以使用更通用的类型!" 所以我用Seq取代了Lists,希望有一天我可以通过喂他们除了列表以外的东西来让我的东西变得更快.

那么我应该为哪些通用的堆栈式数据结构编写我的方法和算法?我能坚持一般的模式吗?所有这一切都是因为这些方法可能需要在将来进行优化,以防它们形成瓶颈.

更新

我会尝试更精确一点:假设您知道正在使用哪些操作,例如反转,.tail,直接元素访问或理解.我可以选择一个类型,这将迫使这些运营效率?

更新2

我非常了解各种任务的具体数据结构的性能.我不知道的是哪个数据结构可能显示为某种超类型的子类.

例如,我应该使用TraversableOnce或IndexedSeq而不是List或Array吗?它会给我买什么东西吗?

附加问题

什么是你的默认列表类似的数据结构的签名?你写的吗?

def a(b: List[A]): List[A] 
Run Code Online (Sandbox Code Playgroud)

要么

def a(b: TraversableOnce[A]): TraversableOnce[A]
Run Code Online (Sandbox Code Playgroud)

你能解释一下原因吗?

design-patterns scala

16
推荐指数
3
解决办法
6847
查看次数

如何编写一个zipWith方法,返回与传递给它的集合相同类型的集合?

我达到了这个目的:

implicit def collectionExtras[A](xs: Iterable[A]) = new {
  def zipWith[B, C, That](ys: Iterable[B])(f: (A, B) => C)(implicit cbf: CanBuildFrom[Iterable[A], C, That]) = {
    val builder = cbf(xs.repr)
    val (i, j) = (xs.iterator, ys.iterator)
    while(i.hasNext && j.hasNext) {
      builder += f(i.next, j.next)
    }
    builder.result
  }
}
// collectionExtras: [A](xs: Iterable[A])java.lang.Object{def zipWith[B,C,That](ys: Iterable[B])(f: (A, B) => C)(implicit cbf: scala.collection.generic.CanBuildFrom[Iterable[A],C,That]): That}

Vector(2, 2, 2).zipWith(Vector(4, 4, 4))(_ * _)
// res3: Iterable[Int] = Vector(8, 8, 8)
Run Code Online (Sandbox Code Playgroud)

现在问题是上面的方法总是返回一个Iterable.如何让它返回传递给它的类型集合?(在这种情况下,Vector)谢谢.

scala scala-2.8 scala-collections

11
推荐指数
3
解决办法
1014
查看次数

斯卡拉"晃来晃去"当地街区

在scala中,可以在函数中定义局部块.例如,本地块评估最后的语句

val x = {val x =1;x+1}
Run Code Online (Sandbox Code Playgroud)

这里x==2,内部val x是该块的本地.

但是,在编写匿名类时,这些本地块可能会导致漏洞.例如(来自scala的参考)

new Iterator[Int]
{...} // new anonymous class inheriting from Iterator[Int]

new Iterator[Int]

{...} //new Iterator[Int] followed by a "dangling" local block
Run Code Online (Sandbox Code Playgroud)

两种情况之间的差异令人沮丧.有时,如果不是那些两段代码可以编译,例如Iterator[Int],Range(0,1,1)被使用.

我想到了它,并且找不到需要"悬空"本地块(即,其值不使用的本地块)(或使代码更优雅)的情况.

是否存在我们需要本地块而不使用其值(并且不将其放在不同的函数中并调用此函数)的情况?我会很高兴举个例子.

如果没有,我认为每当scalac遇到"悬空"本地区块时发出警告(甚至禁止altogther)会很好.我错过了什么吗?

coding-style scala

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