自从我上次在位和字节级别进行编程以来,已经很长时间了,并且想要确认那些日子我似乎记得的东西:
假设我有两个相等长度的整数(1,2,4,8个字节;无所谓),我将它们加起来:如果它们是有符号或无符号的,则总和的逐位结果是否不同.换句话说:无论它们是有符号整数还是无符号整数,这些位最终都是相同的吗?
我的直觉和脆弱的记忆告诉我他们会,但我只想确认一下.谢谢.
我正在试验json4s库(基于lift-json).我想做的一件事是将JSON字符串解析为AST,然后对其进行操作.
例如,我想要一个字段(如果它不存在则将字段插入AST,或者如果它存在则更新其值).
我无法在文档中找到如何做到这一点.尝试了可用的方法,我提出了以下哪些有效,但感觉很笨拙.
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.native.JsonMethods._
object TestJson {
implicit val formats = DefaultFormats
def main(args: Array[String]): Unit = {
val json = """{"foo":1, "bar":{"foo":2}}"""
val ast = parse(json).asInstanceOf[JObject]
println( upsertField(ast, ("foo" -> "3")) )
println( upsertField(ast, ("foobar" -> "3")) )
}
def upsertField(src:JObject, fld:JField): JValue = {
if(src \ fld._1 == JNothing){
src ~ fld
}
else{
src.replace(List(fld._1), fld._2)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢它有很多原因:
parse(json)转换为JObjectupsertField函数的结果是a JValue,如果我想进一步操作对象,我将不得不重新制作upsertField功能只是感觉很unelegant有没有更好的方法来转换AST? …
我必须建立一个列表,其成员应该包含或不基于每个成员的不同条件.
假设我必须验证采购订单,并且根据价格,我必须通知许多人:如果价格超过10,则必须通知主管.如果价格超过100,那么主管和经理.如果价格超过1000,那么主管,经理和主管.
我的功能应该以价格作为输入并输出要通知的人员列表.我想出了以下内容:
def whoToNotify(price:Int) = {
addIf(price>1000, "director",
addIf(price>100, "manager",
addIf(price>10, "supervisor", Nil)
)
)
}
def addIf[A](condition:Boolean, elem:A, list:List[A]) = {
if(condition) elem :: list else list
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法在普通Scala中执行此操作?我用我的addIf功能在这里重新发明了一些轮子吗?
请注意,价格检查只是一种简化.在现实生活中,检查在许多数据库字段上会更复杂,并且组织层次结构中的某些人不会暗示包括下面的所有人,因此截断列表解决方案将无法工作.
基本上,我想使用不可变列表来实现以下目的:
def whoToNotify(po:PurchaseOrder) = {
val people = scala.collection.mutable.Buffer[String]()
if(directorCondition(po)) people += "director"
if(managerCondition(po)) people += "manager"
if(supervisorCondition(po)) people += "supervisor"
people.toList
}
Run Code Online (Sandbox Code Playgroud) 我的程序中有几个Flow,我想并行处理.一切都完成后,我想触发一些行动.
执行此操作的一种方法是在每次完成后向Actor发送消息,并且当Actor验证所有流已准备好时,它可以触发该操作.
我想知道是否有一些我可能会忽略的akka-streams Scala DSL中的任何东西会使它更简单.
编辑:将流转换为未来是行不通的,因为正如文档所提到的,Future在流中发生的第一个事件之后立即完成.运行以下代码:
implicit val system = ActorSystem("Sys")
val fm = FlowMaterializer(MaterializerSettings())
def main(args: Array[String]): Unit = {
val fut = Flow(1 second, {() => println("tick")}).toFuture(fm)
fut.onComplete{ _ =>
println("future completed")
}
}
Run Code Online (Sandbox Code Playgroud)
打印"tick",然后是"future completed",然后是"tick"的无限序列.
假设我有一些有限集: A, B, ..., K
我也有A1, A2, ... AnA的子集; B1, B2, ... Bn这是B等的子集
让我们说S是笛卡尔积A x B x ... x K
并且Sn是笛卡儿的产品An x Bn x ... x Kn
有没有一种算法可以有效地确定所有联合Sn是否相等S?
编辑
我也在理论计算机科学论坛上问了这个问题.答案证明问题是完全可靠的.如果答案的作者想在这里发布,我仍然可以提出问题以奖励赏金.
有没有人知道我可以找到一个经典的"聊天"应用程序的例子,使用Akka Futures和Scalatra 2.1?文档中的Futures示例有点微不足道,因为我对Akka是全新的,而且对Scalatra来说相对较新,我想从一个坚实的基础开始.我知道这可能很难,因为Scalatra 2.1仍在正式开发中.
我正在考虑使用mongodump进行日常备份.
如果我总是在同一目录上执行转储:在运行mongodump之前,我是否必须确保清除前一天的内容?我在文档中找不到任何相关内容.
我是 ScalaFX 的新手。我正在尝试调整一个基本的 TableView 示例,以包含整数列。
到目前为止,我想出了以下代码:
class Person(firstName_ : String, age_ : Int) {
val name = new StringProperty(this, "Name", firstName_)
val age = new IntegerProperty(this, "Age", age_)
}
object model{
val dataSource = new ObservableBuffer[Person]()
dataSource += new Person("Moe", 45)
dataSource += new Person("Larry", 43)
dataSource += new Person("Curly", 41)
dataSource += new Person("Shemp", 39)
dataSource += new Person("Joe", 37)
}
object view{
val nameCol = new TableColumn[Person, String]{
text = "Name"
cellValueFactory = {_.value.name}
}
val ageCol = …Run Code Online (Sandbox Code Playgroud) 我的服务器应用程序使用Scalatra,json4s和Akka.
它收到的大多数请求都是POST,它们会立即返回给客户端并返回固定响应.实际响应以异步方式发送到客户端的服务器套接字.为此,我需要getRemoteAddr从http请求.我正在尝试使用以下代码:
case class MyJsonParams(foo:String, bar:Int)
class MyServices extends ScalatraServlet {
implicit val formats = DefaultFormats
post("/test") {
withJsonFuture[MyJsonParams]{ params =>
// code that calls request.getRemoteAddr goes here
// sometimes request is null and I get an exception
println(request)
}
}
def withJsonFuture[A](closure: A => Unit)(implicit mf: Manifest[A]) = {
contentType = "text/json"
val params:A = parse(request.body).extract[A]
future{
closure(params)
}
Ok("""{"result":"OK"}""")
}
}
Run Code Online (Sandbox Code Playgroud)
该withJsonFuture函数的目的是将一些样板移出路径处理.
这有时会起作用(打印一个非空值request),有时候request是null,我觉得很令人费解.我怀疑我必须"关闭" request我的未来.但是,当没有其他请求发生时,在受控测试方案中也会发生错误.我想request是不可改变的(也许我错了?)
为了解决这个问题,我已将代码更改为以下内容:
case class …Run Code Online (Sandbox Code Playgroud) 我有一个ScalaJS函数,我想从JS调用,它有一个Option [String]参数.我无法弄清楚如何从JS创建一些[String]和None [String].