小编kci*_*ski的帖子

如何在Scala中堆叠applicative functor

当您的计算步骤是独立的时,通常会提到应用仿函数作为monad的替代.他们经常提到的一个优点是,当你想要堆叠应用程序时,你不需要变换器,因为F[G[X]]它总是一个应用程序.假设我有以下功能:

def getDataOption(): Option[Data]
def getUserFuture(): Future[User]
def process(data: Data, user: User)
Run Code Online (Sandbox Code Playgroud)

我想有优雅的堆叠,以获得Future[Option[User]]Future[Option[Data]]和地图与process.

到目前为止,我只想出了这个(使用Cats):

Applicative[Future]
  .compose[Option]
    .map2(
      Applicative[Future].pure(getDataOption()),
      getUserFuture().map(Applicative[Option].pure))(process)
Run Code Online (Sandbox Code Playgroud)

但我相信这远非理想.是否有更优雅和通用的方式来实现相同的目标?

scala scalaz scala-cats

26
推荐指数
1
解决办法
828
查看次数

如何将水平中断应用于d3.js条形图

我正在使用人力车(基于d3.js)来绘制堆积的条形图.问题是第一个栏通常比其他栏更高,破坏了视觉反馈. 条形图比例不好

使用对数标度(我猜)这里不是一个选项,因为那时条形图中堆栈之间的比例会被破坏.我想引入一个横向中断,如下图所示: 条形图与水平休息

但是,我找不到Rickshaw或d3.js的任何开箱即用的功能来做这样的事情.有关如何制作一个的任何建议?

charts d3.js rickshaw

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

Redis的"空回复"究竟是什么?

我使用Redis和Scala(rediscala库).我需要创建一个这样的事务:

redisTransaction.watch(key)
redisTransaction.zremrangebyscore(key, limit, limit) *>
redisTransaction.zadd(key, (someValue, entry)) *>
redisTransaction.set[ByteString](s"$lastSeqNumKey", sequenceNum) *>
redisTransaction.exec().void
Run Code Online (Sandbox Code Playgroud)

最后一个表达式应该返回一个Future[Unit]我希望在事务失败时失败的表达式.但是,Redis文档指出:

使用WATCH时,如果执行中止,EXEC可以返回Null回复.

什么是"空回复"?我的Future[Unit]遗嘱可能是一个null值,还是空字符串或类似的东西?我想写一个测试,我需要一些关于它的提示.

scala redis

8
推荐指数
1
解决办法
642
查看次数

如何知道Akka Cluster Client的初始联系人?

Akka Cluster Client需要一个可以联系以便与集群联系的初始节点的列表。似乎必须提供至少一个确切的节点地址和端口。在由DC / OS管理的环境中,集群成员可以具有动态地址和端口关联。解决此问题的最佳方法是什么?集群客户端是否有像Akka Cluster Management这样的支持?

akka akka-cluster

8
推荐指数
1
解决办法
81
查看次数

Kafka Streams聚合阶段是否对每个元素进行序列化和反序列化?

我注意到,该aggregate()阶段似乎在序列化/反序列化每个元素,即使它定期发出结果。

  streamBuilder
      .stream(inputTopic, Consumed.`with`(keySerde, inputValueSerde))
      .groupByKey(Serialized.`with`(keySerde, inputValueSerde))
      .aggregate(
        () => Snapshot.Initial(),
        (_, event, prevSnap: Snapshot) => {
          // ...
        },
        Materialized.as(stateStoreName).withValueSerde(snapshotSerde)
      )
      .toStream()
Run Code Online (Sandbox Code Playgroud)

我希望键值存储可以在内存中工作,直到提交提交为止。看起来不仅为每个更新进行写操作,而且还存在反序列化的读操作。有人可以解释一下这是如何工作的,如果我应该关注表现吗?

apache-kafka apache-kafka-streams

8
推荐指数
1
解决办法
41
查看次数

从其字段的树中访问类树

我想写一个丰富案例类的宏.当我声明我的案例类时:

case class User(int id, @tagged name)

我希望能够在Tree这个只有注释的类中注入一些东西.到目前为止,我只能够达到Symbol的封装类的,但看起来还不够(见尤金的答案在这里).我也不想使用弃用的api c.enclosingClass.有没有办法ClassDef在天堂2.1.0(Scala 2.11)达到父母?

scala scala-macro-paradise

6
推荐指数
0
解决办法
41
查看次数