我需要结合仅在Chrome打包应用(访问syncFileSystem)中提供的功能和仅在Chrome扩展中可用的功能(将脚本注入第三方网站).
似乎打包应用程序和扩展程序都无法实现这两个目标,所以我现在正在考虑尝试使用单独的打包应用程序和扩展程序进行通信来实现我所追求的目标.
我看到Chrome的文档解释了如何2个扩展可以通过沟通chrome.runtime.onMessageExternal.addListener
和chrome.runtime.sendMessage
,但没有关于打包应用程序和通信扩展.
有谁知道这是否允许?那里有文件或工作实例吗?
javascript google-chrome google-chrome-extension google-chrome-app
通常不需要关注Scala中的隐式参数,但有时理解编译器如何自动提供它们非常有用.不幸的是,这种理解似乎很难获得!
在给定的代码段中是否有一种通用的方法来发现如何提供隐式参数?
理想情况下,有一天IDE集成会以某种方式提供这些信息,但我现在预计我将不得不深入挖掘.有没有办法让编译器准确解释它在任何给定点选择的隐式定义?这可以从其他编译器输出间接解密吗?
举个例子,我想知道如何计算出我自己在implicit bf: CanBuildFrom[Repr, B, That]
参数TraversableLike.map
从何而来,不读这样的问题这样一个堆栈溢出!
让我们假设我有一个具有两个类型参数的特征,例如
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)
任何人有任何想法如何实现这种效果?
我一直在寻找新的Scala 2.9并行系列,我希望放弃一大堆类似东西的狡猾的业余版本.特别是,我想用自己的东西替换默认实现基础的fork join pool(例如,通过actor分配网络任务评估的东西).我的理解是,这只是应用Scala的"可堆叠修改"范式的问题,但是集合库非常令人生畏,我不确定哪些位需要修改!
一些具体问题:
ForkJoinTasks
?FutureThreadPoolTasks
.我如何构建一个使用这个特性的集合而不是ForkJoinTasks
?AdaptiveWorkStealingTasks
并以某种方式实例化使用这个新特征的集合实例?(作为参考,上面提到的所有特征都在Tasks.scala中定义.)
特别是代码示例非常受欢迎!
在斯卡拉,
{ 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
吗?
说我有一个Stream
相当昂贵的计算.我可以通过编写类似的东西轻松创建一个"提前计算"的线程
import scala.actors.Futures._
val s = future { stream.size }
Run Code Online (Sandbox Code Playgroud)
如果我然后抛弃对此的引用,该Future
线程是否会被垃圾收集器杀掉?
如果A
有Ordered[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]
对象上使用词典排序,但我想要的代码可以适应其他顺序.
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) 我理解如何通过可变tasksupport
字段设置单个并行集合的并行度级别(参见/sf/answers/379774811/).
如何在Scala 2.10中为所有新并行集合设置并行度级别?
一个附属问题---是由tasksupport
并行集合"继承"并由它构建的新并行集合相关联的吗?(例如,与take
,map
等)
似乎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 ×9
autoboxing ×1
boxing ×1
currying ×1
debugging ×1
future ×1
html-lists ×1
implicit ×1
javascript ×1
performance ×1
scala-2.10 ×1
scala-2.9 ×1
sorting ×1
type-erasure ×1
types ×1