我在我的喷雾罐服务器中使用以下路径(使用喷雾1.2):
path("my"/"path"){
get{
complete{
val buf:Array[Byte] = functionReturningArrayofByte()
println(buf.length)
buf
}
}
}
Run Code Online (Sandbox Code Playgroud)
缓冲区的长度(以及上面代码打印的内容)是2,263,503字节.但是,my/path从Web浏览器访问时,它会下载长度为10,528,063字节的文件.
我认为spray将内容类型设置为application/octet-stream,并在完成时自动设置内容长度Array[Byte].我没有意识到我可能做错了什么.
编辑
我运行了一个小测试,并看到字节数组输出为String.因此,例如,如果我有两个字节,例如0xFF和0x01,那么输出而不仅仅是两个字节将是字符串[ 255, 1 ].我只是不知道如何输出原始内容而不是它的字符串表示.
我试图结合使用SWT和Akka.其中一个SWT小部件是Browser嵌入式Web浏览器,允许JS代码通过BrowserFunction对象中的回调函数调用JVM代码.
我有以下代码:
import org.eclipse.swt.widgets.Composite
import org.eclipse.swt.browser._
import akka.actor.Actor
class MyActor(parentComposite: Composite) extends Actor {
private var mutableContent: Any = ???
val browser = new Browser(parentComposite, SWT.BORDER)
val browserFunction = new BrowserFunction(browser, "JS_CallableFunctionName") {
val ref = context.self
override def function(arguments: Array[Object]): Object = {
ref ! "Is it safe to send a message to myself?"
null
}
}
def receive = {
case _ => ???
}
}
Run Code Online (Sandbox Code Playgroud)
玩家在其中一个回调中向自己发送消息是否存在任何风险?
有没有办法在Flex中执行类似以下(伪代码)的操作:
var x:XML = <xml>
if(condition){
<tag>hello</tag>
}
</xml>;
Run Code Online (Sandbox Code Playgroud)
这将返回<xml><tag>hello</tag></xml>如果条件是真实的和<xml></xml>(或<xml/>)如果条件是假的?
附加说明:我知道如何追加孩子等等.我正在寻找一种方法来在文字表达中做到这一点.
我有以下代码:
val userName = users.get(userID) match {
case Some(user) => user.name
case None => "Invalid User ID"
}
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方式来写这个?
我想知道是否有类似的东西getOrElse,如果它成功(提取用户名),我会应用一个函数,否则返回一个普通值.
我有:ox: Option[A]和oxs: Option[List[A]].
我想要:
ox.get :: oxs.get如果两者都存在则返回.
List(ox.get)如果ox存在则返回,oxs但没有.
oxs.get如果oxs存在则返回,ox但没有.
List()两者都返回None.
我可以用ifs和matches.我只是想知道是否有任何优雅的惯用方式呢?
编辑:我已经测试过:List(ox.map(List(_)), oxs).flatten.flatten它似乎适用于所有四种情况,但它看起来仍然有点难以理解.
我有以下功能:
@tailrec
def samePrefix[A](length: Int)(a: Vector[A], b: Vector[A]): Boolean = {
if(length<1) true
else{
if(a(length-1)==b(length-1)) samePrefix(length-1)(a, b)
else false
}
}
Run Code Online (Sandbox Code Playgroud)
在给定要检查的长度的情况下,检查两个向量是否具有相等的第一元素.
我想知道是否打电话的部分
samePrefix(length-1)(a, b)
Run Code Online (Sandbox Code Playgroud)
首先会创建一个函数对象samePrefix(length-1)然后应用(a,b)它,或者它只是递归地调用我的方法.
有一篇文章声称,对于大量数字的计算,Metal 可能比 Accelerate 框架更快。
在查看 Metal 着色器语言的文档后,我意识到不支持双精度浮点数或 64 位整数数组。我是否忽略了什么?我以为 Metal 是为 64 位 A7 处理器设计的?
我想做类似以下的事情:
val foo = List[B <% JValue] = 42 :: "hello" : Nil
让编译器知道我的列表成员可以转换为JValues.
但是,这不编译.我不能满足于List[Any]因为我必须使用其成员,其中可以转换为JValues的值是预期的,例如:
def fun[A <% JValue](x: List[A]) = ...
有什么方法可以解决这个问题吗?
我有以下方法:
def foo[A](x: =>A) = ???
def foo[B](x: =>WrapperType[B]) = ???
Run Code Online (Sandbox Code Playgroud)
这不会编译,因此很有意义,因为在第一种方法中,A也可以代表WrapperType[B]。我可以x在运行时检查类型,但似乎应该有一种在编译时执行此操作的方法。我该如何克服这个问题?
注意:上面的代码是我的真实代码的简化,它是:
def ifEmpty[B](errors:Seq[Error]*)(right: =>B): Either[Seq[Error], B] =
if( areAllEmpty(errors) ) Right(right)
else Left(errors.flatten)
def ifEmpty[C](errors:Seq[Error]*)(right: =>Either[Seq[Error], C]): Either[Seq[Error], C] =
if( areAllEmpty(errors) ) right
else Left(errors.flatten)
Run Code Online (Sandbox Code Playgroud)