小编Sco*_*son的帖子

在Chrome打包应用和Chrome扩展程序之间进行通信?

我需要结合仅在Chrome打包应用(访问syncFileSystem)中提供的功能和仅在Chrome扩展中可用的功能(将脚本注入第三方网站).

似乎打包应用程序和扩展程序都无法实现这两个目标,所以我现在正在考虑尝试使用单独的打包应用程序和扩展程序进行通信来实现我所追求的目标.

我看到Chrome的文档解释了如何2个扩展可以通过沟通chrome.runtime.onMessageExternal.addListenerchrome.runtime.sendMessage,但没有关于打包应用程序和通信扩展.

有谁知道这是否允许?那里有文件或工作实例吗?

javascript google-chrome google-chrome-extension google-chrome-app

26
推荐指数
1
解决办法
5848
查看次数

是否有系统的方法来发现哪些隐式defs在范围内,哪一个在特定点绑定?

通常不需要关注Scala中的隐式参数,但有时理解编译器如何自动提供它们非常有用.不幸的是,这种理解似乎很难获得!

在给定的代码段中是否有一种通用的方法来发现如何提供隐式参数?

理想情况下,有一天IDE集成会以某种方式提供这些信息,但我现在预计我将不得不深入挖掘.有没有办法让编译器准确解释它在任何给定点选择的隐式定义?这可以从其他编译器输出间接解密吗?

举个例子,我想知道如何计算出我自己在implicit bf: CanBuildFrom[Repr, B, That]参数TraversableLike.map从何而来,不读这样的问题这样一个堆栈溢出!

compiler-construction debugging scala implicit

22
推荐指数
2
解决办法
2880
查看次数

是否有可能在Scala中"嘲笑"更高级的类型?

让我们假设我有一个具有两个类型参数的特征,例如

trait Qux[A, B]
Run Code Online (Sandbox Code Playgroud)

和另一个具有更高通道类型参数的特征,例如

trait Turkle[C[_]]
Run Code Online (Sandbox Code Playgroud)

我希望能够将一个固定值替换为其中一个类型参数Qux,以便它可以用于参数化Turkle.

这是一个示例(在Scala中没有意义的代码!):

trait Baz[A] extends Turkle[Qux[A, _]]
Run Code Online (Sandbox Code Playgroud)

任何人有任何想法如何实现这种效果?

types scala currying higher-kinded-types kind-projector

21
推荐指数
1
解决办法
1858
查看次数

如何为Scala 2.9并行集合替换fork连接池?

我一直在寻找新的Scala 2.9并行系列,我希望放弃一大堆类似东西的狡猾的业余版本.特别是,我想用自己的东西替换默认实现基础的fork join pool(例如,通过actor分配网络任务评估的东西).我的理解是,这只是应用Scala的"可堆叠修改"范式的问题,但是集合库非常令人生畏,我不确定哪些位需要修改!

一些具体问题:

  1. 标准并行实现通过代码中的fork连接池进行交互是否正确ForkJoinTasks
  2. 我看到有另一种特质,FutureThreadPoolTasks.我如何构建一个使用这个特性的集合而不是ForkJoinTasks
  3. 我是否可以编写另一个替代方法(也许是一个混合的相应样板类,AdaptiveWorkStealingTasks并以某种方式实例化使用这个新特征的集合实例?

(作为参考,上面提到的所有特征都在Tasks.scala中定义.)

特别是代码示例非常受欢迎!

parallel-processing scala scala-2.9 parallel-collections

19
推荐指数
2
解决办法
1637
查看次数

为什么原始类型如Int在Scala中被删除为Object?

在斯卡拉,

{ x: Option[Int] => x }
   .getClass
   .getMethod("apply", classOf[Option[_]])
   .getGenericParameterTypes
Run Code Online (Sandbox Code Playgroud)

回报Array(scala.Option<java.lang.Object>).我最初期待看到Array(scala.Option<scala.Int>),但我看到它scala.Int是一个值类(extends AnyVal)'其实例未被底层主机系统表示为对象'.

不过,我仍然不理解擦除Object.难道不是更有用java.lang.Integer吗?

autoboxing scala type-erasure

15
推荐指数
1
解决办法
482
查看次数

当Scala"Future"被垃圾收集时会发生什么?

说我有一个Stream相当昂贵的计算.我可以通过编写类似的东西轻松创建一个"提前计算"的线程

import scala.actors.Futures._
val s = future { stream.size }
Run Code Online (Sandbox Code Playgroud)

如果我然后抛弃对此的引用,该Future线程是否会被垃圾收集器杀掉?

garbage-collection scala future

14
推荐指数
1
解决办法
786
查看次数

如何在Scala中按字典顺序对列表集合进行排序?

如果AOrdered[A]特征,我希望能够拥有像这样的代码

val collection: List[List[A]] = ... // construct a list of lists of As
val sorted = collection sort { _ < _ }
Run Code Online (Sandbox Code Playgroud)

并获得列表按字典顺序排序的内容.当然,仅仅因为A具有特征Ordered[A]并不意味着List[A]具有特征Ordered[List[A]].然而,据推测,执行此操作的"scala方式"是隐式def.

我如何隐式地将a转换List[A]为a Ordered[List[A]],假设A具有特征Ordered[A](以便上面的代码可以正常工作)?

我记得在List[A]对象上使用词典排序,但我想要的代码可以适应其他顺序.

sorting scala html-lists lexicographic

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

Scala的.min如何避免拳击和拆箱的惩罚?

Vector.min实施

def min[B >: A](implicit cmp: Ordering[B]): A = {
  if (isEmpty)
    throw new UnsupportedOperationException("empty.min")
  reduceLeft((x, y) => if (cmp.lteq(x, y)) x else y)
}
Run Code Online (Sandbox Code Playgroud)

当你描述

Vector.fill(1000000)(scala.util.Random.nextLong).min
Run Code Online (Sandbox Code Playgroud)

它很快,没有拳击或拆箱.但是,如果你写的是明显相同的

val cmp = implicitly[Ordering[Long]]
Vector.fill(1000000)(scala.util.Random.nextLong).reduceLeft((x, y) => if (cmp.lteq(x, y)) x else y)
Run Code Online (Sandbox Code Playgroud)

它的运行速度大约慢了10倍(忽略了Random中的时间,否则它会占据主导地位,是的,我将基准测试加热了......).

第一个版本如何避免拳击的性能损失?

编辑:这是我的分析代码:

val cmp = implicitly[Ordering[Long]]

def randomLongs = Vector.fill(1000000)(scala.util.Random.nextLong)

def timing[R](f: => R): (Long, R) = {
  val startTime = System.nanoTime
  val result = f
  ((System.nanoTime - startTime) / 1000000, result)
}

def …
Run Code Online (Sandbox Code Playgroud)

performance boxing scala

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

为Scala 2.10中的所有集合设置并行度级别?

我理解如何通过可变tasksupport字段设置单个并行集合的并行度级别(参见/sf/answers/379774811/).

如何在Scala 2.10中为所有新并行集合设置并行度级别?

一个附属问题---是由tasksupport并行集合"继承"并由它构建的新并行集合相关联的吗?(例如,与take,map等)

parallel-processing scala scala-2.10

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

为什么scala.math.PartialOrdering.lteq是抽象的,而不是根据.tryCompare定义的?

似乎scala.math.PartialOrdering.lteq必须始终定义为(或至少给出相同的结果):

override def lteq(x: Pattern, y: Pattern) = {
    tryCompare(x, y).map(_ <= 0).getOrElse(false)
}
Run Code Online (Sandbox Code Playgroud)

是否有某种原因这种实施没有在scala.math.PartialOrdering特质中给出?

scala partial-ordering

8
推荐指数
1
解决办法
489
查看次数