小编0__*_*0__的帖子

为协变集合添加`to [Col [_]]`方法

我正在实现一个数据结构.虽然它没有直接混合Scala的任何标准集合特性,但我希望包含一个to[Col[_]]方法,在给定构建器工厂的情况下,该方法可以生成标准的Scala集合.

现在假设这个,复制自GenTraversableOnce:

trait Foo[+A] {
  def to[Col[_]](implicit cbf: CanBuildFrom[Nothing, A, Col[A]]): Col[A]
}
Run Code Online (Sandbox Code Playgroud)

这失败了error: covariant type A occurs in invariant position.

那怎么能GenTraversableOnce实现呢?我可以在源代码中看到,他们添加了annotation.unchecked.uncheckedVariance...

这看起来像一个肮脏的把戏.如果typer正常拒绝这个,那怎么能安全并且关掉uncheckedVariance

collections scala covariance

6
推荐指数
1
解决办法
208
查看次数

Enrich-My-Library适用于所有Traversables

我试图弄清楚如何编写一个适用于任何函数的函数交换函数Traversable[_],给定一个集合和交换索引.我想出了以下内容:

def swap[A, CC <% Traversable[A]](xs: CC, i: Int, j: Int): Traversable[A] = {
  xs.slice(0, i) ++ 
    xs.slice(j, j+1) ++ 
    xs.slice(i+1, j) ++ 
    xs.slice(i, i+1) ++ 
    xs.slice(j+1, xs.size)
}

swap(List(1,2,3,4,5), 0, 4) // => List(5,2,3,4,1)
Run Code Online (Sandbox Code Playgroud)

我想知道如何将它变成Traversable的隐式扩展,让我可以调用它List(1,2,3,4,5).swap(0, 4).我能得到的最接近的是:

import language.implicitConversions
class RichTraversable[A, B <% Traversable[A]](xs: B) {
  def swap(i: Int, j: Int): Traversable[A] = {
    xs.slice(0, i) ++ 
      xs.slice(j, j+1) ++ 
      xs.slice(i+1, j) ++ 
      xs.slice(i, i+1) ++ 
      xs.slice(j+1, xs.size)
  }
} 
implicit def richTraversable[A, B <% Traversable[A]](ys: …
Run Code Online (Sandbox Code Playgroud)

types scala implicit enrich-my-library

6
推荐指数
1
解决办法
205
查看次数

by-names参数如何在高阶函数中起作用?

我试图理解名字类型注释在高阶函数的上下文中的含义.这是一个例子:

object Test { 
  def apply[A, B](f: (=> A) => B, x: => A): B = f(x) 
  def const[A](ignored: A): Int = 1
  val res: Int = apply(const, ???)
}
Run Code Online (Sandbox Code Playgroud)

const它的参数是严格的(即它缺少一个=>注释),那么为什么不强制它的参数(???在这种情况下是这样)并引发异常?

是否有一篇描述语义的论文?

我在这里寻找权威的答案.

scala

6
推荐指数
1
解决办法
411
查看次数

使用Spire的Rationals的总和或产品(如何获得scala.Numeric)

我认为这应该是直截了当的:

import spire.math.Rational

val seq  = Vector(Rational(1, 4), Rational(3, 4))
val sum  = seq.sum      // missing: scala.Numeric
val prod = seq.product  // missing: scala.Numeric
Run Code Online (Sandbox Code Playgroud)

我想这只是将正确的东西带入隐含范围的问题.但是我要导入什么?

我可以看到,为了得到一个RationalIsNumeric,我必须做这样的事情:

import spire.math.Numeric._
implicit val err = new ApproximationContext(Rational(1, 192))
implicit val num = RationalIsNumeric
Run Code Online (Sandbox Code Playgroud)

但那只是给了我一个spire.math.Numeric.所以我另外尝试这个:

import spire.math.compat._
Run Code Online (Sandbox Code Playgroud)

但没有运气......

math scala numerical-methods spire

6
推荐指数
2
解决办法
501
查看次数

scaladoc的手册页在哪里?

看着http://www.scala-sbt.org/release/docs/Howto/scaladoc.html有给了scaladoc选择这样的例子-groups-implicits.

有关scaladoc(2.10)选项的信息在哪里?就像一个手册页.我似乎无法找到它,既不是docs.scala-lang.org,也不是wiki.scala-lang.org ......

除了由sbt管理之外我不使用Scala安装,所以我真的想要一个在线资源.

scala scaladoc

6
推荐指数
1
解决办法
1264
查看次数

是否可以使用次要版本更新来更新传递依赖性?

让我们说我foo从版本1.0.0到库创建了我的库的二进制兼容更新1.0.1.图书馆foo通过Maven发布.

我是否可以使用此次要版本更新来同时修复依赖项的次要版本foo?例如,版本1.0.0正在使用scalaVersion := "2.10.1".我可以将其更改为scalaVersion := "2.10.3"foo 1.0.1,还是会导致麻烦?

假设我foo在另一个项目中使用

"mygroup" %% "foo" % "1.0.+"
Run Code Online (Sandbox Code Playgroud)

scala backwards-compatibility maven sbt

6
推荐指数
1
解决办法
453
查看次数

从模式匹配返回路径相关类型

鉴于异构类型:

trait Request {
  type Result
}

trait IntRequest extends Request {
  type Result = Int
}
Run Code Online (Sandbox Code Playgroud)

如何让Scala编译器满意地根据模式匹配返回路径依赖类型:

def test(in: Request): in.Result = in match {
  case i: IntRequest => 1234
  case _ => sys.error(s"Unsupported request $in")
}
Run Code Online (Sandbox Code Playgroud)

错误:

<console>:53: error: type mismatch;
 found   : Int(1234)
 required: in.Result
         case i: IntRequest => 1234
                               ^
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching path-dependent-type

6
推荐指数
1
解决办法
238
查看次数

@volatile usage unclear - 将带有`var`的对象发送到另一个线程

我不确定我@volatile在这里使用得当.我有一个缓冲区,像这样:

final class BufD(val buf: Array[Double], @volatile var size: Int)
Run Code Online (Sandbox Code Playgroud)

哪个在进程之间发送,从而可能跨越线程边界.发件人可以size在发送之前更新字段.因此,我想确保接收器在任何情况下都不能size在这里看到陈旧的值.第一个问题:是否@volatile确保这或者是多余的?

现在我介绍一个特点:

trait BufLike {
  @volatile var size: Int
}

final class BufD(val buf: Array[Double], @volatile var size: Int) extends BufLike
Run Code Online (Sandbox Code Playgroud)

这给了我一个编译器警告:

警告:(6,4)没有方法大小的注释的有效目标 - 它被丢弃未使用.您可以使用元注释指定目标,例如@(volatile @getter)

 @volatile var size: Int
  ^
Run Code Online (Sandbox Code Playgroud)

第二个问题:我应该删除@volatile此处还是以不同方式更改它?

concurrency scala

6
推荐指数
1
解决办法
5053
查看次数

OpenCV的Sobel滤镜 - 为什么它看起来如此糟糕,特别是与Gimp相比?

我正在尝试使用OpenCV重建我之前在Gimp中完成的一些预处理.第一阶段是用于边缘检测的Sobel滤波器.它在Gimp中非常有效:

在此输入图像描述

现在这是我对OpenCV的尝试:

opencv_imgproc.Sobel(/* src = */ scaled, /* dst = */ sobel,
  /* ddepth = */ opencv_core.CV_32F,
  /* dx = */ 1, /* dy = */ 1, /* ksize = */ 5, /* scale = */ 0.25,
  /* delta = */ 0.0, /* borderType = */ opencv_core.BORDER_REPLICATE)
Run Code Online (Sandbox Code Playgroud)

它看起来非常糟糕,基本上突出了点而不是轮廓:

在此输入图像描述

那么我做错了什么,或者Gimp如何实现如此好的结果?如何在OpenCV中复制它?

opencv gimp sobel

6
推荐指数
1
解决办法
2435
查看次数

如何在Jekyll博客中包含视频标签/ mp4视频

不是在寻找一种链接到Youtube的方法.我想引用一个自托管的mp4文件.

我已经有{% audio my-file.mp3 %}工作了.

我正在寻找一个等价物{% video my-file.mp4 %}.

如果我<video ... />直接使用,我会在my-text.md中收到错误"Liquid exception:Unknown tag'video'".


编辑:我认为有一个现有的Octopress插件.但是如何安装/让Jekyll知道?

video html5 jekyll octopress

5
推荐指数
1
解决办法
1910
查看次数