我很难理解Akka 2中调度员的差异和推荐用法.我想我理解BalancingDispatcher和CallingThreadDispatcher的行为,但我不知道Dispatcher和PinnedDispatcher.
我不明白的概念Sharability和Bulkheading,无论是.
引入Java 7 WatchService用于持续监视文件系统.是否有Java 6的后端口?
是否有具有类似功能的纯Java库?
我有一个简单的喷雾客户端:
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)
完整代码可以在这里找到.
我想模拟服务器的响应来测试Success和Failure案例中的逻辑.我找到的唯一相关信息是在这里,但我无法使用蛋糕模式来模拟sendReceive方法.
任何建议或例子将不胜感激.
我主要在scala和java中编程,在scala和junit中使用scalatest进行单元测试.我想将相同的测试应用于相同接口/特性的多个实现.我们的想法是验证是否强制执行接口契约并检查Liskov替换原则.
例如,在测试列表的实现时,测试可能包括:
什么是最佳做法?
对于数字密集型代码,我编写了一个具有以下签名的函数:
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) 我不明白=:= [A,B]代表什么以及它如何有用.我做了一些研究,但很难找到没有字母字符的东西.有人可以帮我一个真实的例子吗?
当我尝试编译小例子时:
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) 我觉得自己像个白痴,但我无法用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中的等价物是什么?
为了性能和安全性,我想实现一个固定大小的向量,它既是不可变的又是专用的(我需要快速的算术).我的第一个想法是使用@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.
我还能做些什么来实现我的目标吗?
scala ×9
java ×2
types ×2
unit-testing ×2
actor ×1
akka ×1
autoboxing ×1
boxing ×1
filesystems ×1
java-6 ×1
junit ×1
macros ×1
maven ×1
migration ×1
publishing ×1
sbt ×1
scalatest ×1
spray ×1
spray-client ×1