小编par*_*tic的帖子

将Scala项目提供给社区的推荐方法是什么?

我目前正在编写配置文件库(一种Configgy替换).目前,它是alpha版本并且在GitHub上保持良好状态.但是,当项目足够稳定时,我计划广泛提供生成的JAR文件.

在Ruby上,我为此目的使用了中央RubyGems存储库.但是,我不知道什么是等效的.我在考虑使用Maven存储库,但是哪一个?如何?

我使用SBT 0.7.7并且我没有使用Maven的经验.

scala publishing maven

17
推荐指数
2
解决办法
408
查看次数

Akka 2中调度员的差异和使用模式有哪些?

我很难理解Akka 2中调度员的差异和推荐用法.我想我理解BalancingDispatcherCallingThreadDispatcher的行为,但我不知道DispatcherPinnedDispatcher.

我不明白的概念SharabilityBulkheading,无论是.

scala actor akka

17
推荐指数
2
解决办法
2352
查看次数

WatchService for Java 6

引入Java 7 WatchService用于持续监视文件系统.是否有Java 6的后端口?

是否有具有类似功能的纯Java库?

java filesystems java-6

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

如何模拟喷涂客户端响应

我有一个简单的喷雾客户端:

val pipeline = sendReceive ~> unmarshal[GoogleApiResult[Elevation]]

val responseFuture = pipeline {Get("http://maps.googleapis.com/maps/api/elevation/jsonlocations=27.988056,86.925278&sensor=false") }

responseFuture onComplete {
  case Success(GoogleApiResult(_, Elevation(_, elevation) :: _)) =>
    log.info("The elevation of Mt. Everest is: {} m", elevation)
    shutdown()

  case Failure(error) =>
    log.error(error, "Couldn't get elevation")
    shutdown()
}
Run Code Online (Sandbox Code Playgroud)

完整代码可以在这里找到.

我想模拟服务器的响应来测试SuccessFailure案例中的逻辑.我找到的唯一相关信息是在这里,但我无法使用蛋糕模式来模拟sendReceive方法.

任何建议或例子将不胜感激.

unit-testing scala spray spray-client

15
推荐指数
2
解决办法
5212
查看次数

单元测试几个相同特征/接口的实现

我主要在scala和java中编程,在scala和junit中使用scalatest进行单元测试.我想将相同的测试应用于相同接口/特性的多个实现.我们的想法是验证是否强制执行接口契约并检查Liskov替换原则.

例如,在测试列表的实现时,测试可能包括:

  • 实例应该为空,当且仅当且仅当它的大小为零时.
  • 调用clear后,大小应为零.
  • 在列表中间添加元素,将增加一个rhs元素的索引.
  • 等等

什么是最佳做法?

java junit unit-testing scala scalatest

13
推荐指数
2
解决办法
1133
查看次数

避免功能内的装箱/拆箱

对于数字密集型代码,我编写了一个具有以下签名的函数:

def update( f: (Int,Int,Double) => Double ): Unit = {...}
Run Code Online (Sandbox Code Playgroud)

但是,因为Function3不是专门的,所以每个应用程序都会f在装箱/取消装箱3个参数和结果类型.

我可以使用一个特殊的更新程序类:

trait Updater {
  def apply( i: Int, j: Int, x: Double ): Double
}
def update( f: Updater ): Unit = {...}
Run Code Online (Sandbox Code Playgroud)

但调用很麻烦(和java-ish):

//with function
b.update( (i,j,_) => if( i==0 || j ==0 ) 1.0 else 0.5 )

//with updater
b.update( new Updater {
  def apply( i: Int, j: Int, x: Double ) = if( i==0 || j ==0 ) 1.0 else 0.5 …
Run Code Online (Sandbox Code Playgroud)

macros boxing scala

13
推荐指数
1
解决办法
2465
查看次数

无法弄清楚=:= [A,B]代表什么

可能重复:
Scala 2.8中<:<,<%<和=:=表示什么,它们在哪里记录?

我不明白=:= [A,B]代表什么以及它如何有用.我做了一些研究,但很难找到没有字母字符的东西.有人可以帮我一个真实的例子吗?

types scala

12
推荐指数
1
解决办法
984
查看次数

在Scala中输入Nothing的类型

当我尝试编译小例子时:

trait Foo[A,B] {
  type F[_,_]
  def foo(): F[A,B]
}

class Bar[A,B] extends Foo[A,B] {
  type F[D,E] = Bar[D,E]
  def foo() = this
}

object Helper {
  def callFoo[A,B,FF <: Foo[A,B]]( f: FF ): FF#F[A,B] =
    f.foo()
}

object Run extends App {
  val x = new Bar[Int,Double]
  val y = Helper.callFoo(x)
  println( y.getClass )
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

[error] src/Issue.scala:20: inferred type arguments
[Nothing,Nothing,issue.Bar[Int,Double]] do not conform to method callFoo's type
parameter bounds [A,B,FF <: issue.Foo[A,B]]
[error]       val y = Helper.callFoo(x) …
Run Code Online (Sandbox Code Playgroud)

types scala type-inference

12
推荐指数
1
解决办法
1900
查看次数

在SBT 0.10.x中更改项目布局

我觉得自己像个白痴,但我无法用SBT 0.10.x改变我的项目布局.在我的sbt 0.7.x项目中,我添加了以下行:

override def mainScalaSourcePath = "src" / "scala"
override def testScalaSourcePath = "test" / "scala"
override def mainResourcesPath = "resources"

override def mainJavaSourcePath = "src" / "java"
override def testJavaSourcePath = "test" / "java"
override def testResourcesPath = "test" / "resources"
Run Code Online (Sandbox Code Playgroud)

0.10.x中的等价物是什么?

migration scala sbt

12
推荐指数
1
解决办法
3233
查看次数

实现固定大小,不可变和专用的向量

为了性能和安全性,我想实现一个固定大小的向量,它既是不可变的又是专用的(我需要快速的算术).我的第一个想法是使用@specialized注释(因为我需要整数和实数).

这是第一次尝试:

package so
class Vec[@specialized A] private[so] ( ary: Array[A] ) {
  def apply( i: Int ) = ary(i)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我分析生成的字节码时javap,我可以看到元素仍然是盒装的.例如:

public double apply$mcD$sp(int);
  Code:
   0:   aload_0
   1:   iload_1
   2:   invokevirtual   #33; //Method apply:(I)Ljava/lang/Object;
   5:   invokestatic    #83; //Method scala/runtime/BoxesRunTime.unboxToDouble:(Ljava/lang/Object;)D
   8:   dreturn
Run Code Online (Sandbox Code Playgroud)

看起来数组并不是专门的,这似乎很愚蠢,因为数组专门用于JVM.

我还能做些什么来实现我的目标吗?

autoboxing scala specialized-annotation

12
推荐指数
1
解决办法
488
查看次数