小编Dom*_*kis的帖子

使用Play Framework的JSON库自定义JodaTime序列化程序?

如何为JSON实现自定义JodaTime的DateTime序列化器/解串器?我倾向于使用Play Framework的JSON库(2.1.1).有一个默认的DateTime序列化程序,但它使用dt.getMillis而不是.toString返回符合ISO标准的字符串.

写入读取[T]和写入[T]的案例类似乎相当简单,但我无法弄清楚如何为DateTime做同样的事情.

serialization json scala deserialization playframework-2.1

17
推荐指数
3
解决办法
1万
查看次数

参数的默认值如何引用另一个参数?

参数的默认值如何引用另一个参数?如果不能,如何解决?

case class A(val x:Int, val y:Int = x*2)
Run Code Online (Sandbox Code Playgroud)

错误(合理地):

scala> case class B(val x:Int, val y:Int = x*2)
<console>:7: error: not found: value x
   case class B(val x:Int, val y:Int = x*2)
                                       ^
Run Code Online (Sandbox Code Playgroud)

scala scala-2.10

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

我如何有条件地退回不同类型的期货?

我有一个方法,根据谓词,将返回一个未来或另一个.换句话说,返回未来的if-else表达式:

extern crate futures; // 0.1.23

use futures::{future, Future};

fn f() -> impl Future<Item = usize, Error = ()> {
    if 1 > 0 {
        future::ok(2).map(|x| x)
    } else {
        future::ok(10).and_then(|x| future::ok(x + 2))
    }
}
Run Code Online (Sandbox Code Playgroud)

这不编译:

error[E0308]: if and else have incompatible types
  --> src/lib.rs:6:5
   |
6  | /     if 1 > 0 {
7  | |         future::ok(2).map(|x| x)
8  | |     } else {
9  | |         future::ok(10).and_then(|x| future::ok(x + 2))
10 | |     }
   | |_____^ expected …
Run Code Online (Sandbox Code Playgroud)

asynchronous future control-flow rust

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

为什么新线程而不是未来{...}

此答案指示如何转换java.util.concurrent.Futurescala.concurrent.Future,同时管理阻塞将发生的位置:

import java.util.concurrent.{Future => JFuture}
import scala.concurrent.{Future => SFuture}

val jfuture: JFuture[T] = ???
val promise = Promise[T]()
new Thread(
  new Runnable {
    def run() { promise.complete(Try{ jfuture.get }) }
  }
).start
val future = promise.future
Run Code Online (Sandbox Code Playgroud)

我的问题与评论中提出的问题相同:

怎么了future { jfuture.get }?为什么你使用额外的线程与Promise结合?

答案如下:

它会在你的线程拉动中阻止线程.如果您为这样的期货配置了ExecutionContext,那很好,但是默认的ExecutionContext包含与处理器一样多的线程.

我不确定我理解这个解释.重申:

怎么了future { jfuture.get }?在手中创建一个新线程并在那里阻塞时,在未来内部是否阻塞?如果没有,它有什么不同?

java multithreading scala future blocking

11
推荐指数
2
解决办法
1131
查看次数

Scala REPL in Gradle

目前,Gradle的scala集成不提供REPL功能.如何使用适当的类路径从Gradle以符合人体工程学的方式运行Scala REPL?

scala classpath gradle read-eval-print-loop

11
推荐指数
1
解决办法
1827
查看次数

将`Future [Option [X]]`转换为`Option [Future [X]]`

怎么会Future[Option[X]]变成Option[Future[X]]

val futOpt:Future[Option[Int]] = future(Some(1))
val optFut:Option[Future[Int]] = ?
Run Code Online (Sandbox Code Playgroud)

更新:

这是对这个问题的跟进.我想我正试图抓住优雅地改造嵌套的未来.我试图与实现Option叫什么是可以做到Sequences,在那里你转Future[Seq[Future[Seq[X]]]]Future[Future[Seq[Seq[x]]]],然后flatMap将双层.正如Ionut澄清的那样,我已经按照翻转的顺序表达了这个问题,它应该是Option[Future[X]]- > Future[Option[X]].

scala

9
推荐指数
1
解决办法
5414
查看次数

反序列化后,DateTime不等于自身

正如您在下面看到的,在序列化和反序列化之后,您将获得据称不同的DateTime实例:

scala> import org.joda.time.DateTime
import org.joda.time.DateTime

scala> val a = new DateTime()
a: org.joda.time.DateTime = 2014-01-08T19:00:08.883+02:00

scala> val b = DateTime.parse(a.toString())
b: org.joda.time.DateTime = 2014-01-08T19:00:08.883+02:00

scala> a == b
res0: Boolean = false
Run Code Online (Sandbox Code Playgroud)

根据AbstractInstant的javadoc,equals"基于毫秒时刻,时间顺序和时区,将此对象与指定对象进行相等性比较." 所以这不应该发生吗?我错过了什么?

serialization datetime scala jodatime deserialization

7
推荐指数
2
解决办法
2865
查看次数

在Scala中获取随机元素的有效方法?

从Scala中的集合中获取随机元素的有效方法是什么?这里有一个相关的问题,但正如其中一条评论指出的那样,"[那个]问题没有说明任何效率需求".

random scala

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

保留时区信息的ISO8601到DateTime

下面是包含时区信息的ISO8601日期字符串的反序列化.请注意,时区信息丢失:

scala> val date1 = new DateTime().withZone(DateTimeZone.forID("Europe/Berlin"))
date1: org.joda.time.DateTime = 2013-09-22T18:42:15.348+02:00

scala> date1.getZone()
res45: org.joda.time.DateTimeZone = Europe/Berlin

scala> val date2 = new DateTime(date1.toString())
date2: org.joda.time.DateTime = 2013-09-22T19:42:15.348+03:00

scala> date2.getZone()
res46: org.joda.time.DateTimeZone = Europe/Vilnius

scala> date1.getZone() == date2.getZone()
res47: Boolean = false
Run Code Online (Sandbox Code Playgroud)

时区信息(UTC偏移)被序列化,如ISO8601字符串中+03:00+02:00结尾处,但在反序列化后丢失.正如你所看到的date2DateTime对象,这是我预计的副本date1有系统的UTC偏移量,而不是+02:00,它date1有.

如何反序列化ISO8601字符串以保留UTC偏移量?

java datetime jodatime deserialization

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

`未来[选项[未来[选项[X]]]]`进入`未来[选项[X]]`

如何转化Future[Option[Future[Option[X]]]]Future[Option[X]]

如果它是一个TraversableOnce而不是Option我使用Future伴侣对象 ; 但是选项怎么样?

例:

def processAndReturnFuture(x:String):Future[String] = future(x)
def processAgainAndReturnOption(x:String):Option[String] = Some(x)

val futOpt:Future[Option[String]] = future(Some("x"))
val futOptFutOpt:Future[Option[Future[Option[String]]]] =
  futOpt.map( opt =>
    opt.map( x =>
      processAndReturnFuture(x).map( processedX =>
        processAgainAndReturnOption(processedX)
      )
    )
  )
Run Code Online (Sandbox Code Playgroud)

scala

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