小编Geo*_*rge的帖子

登录Scala

在Scala应用程序中登录的好方法是什么?与语言哲学一致的东西,不会使代码混乱,并且维护成本低且不引人注目.这是一个基本要求清单:

  • 简单
  • 不会使代码混乱.Scala非常简洁.我不希望我的一半代码记录语句
  • 可以更改日志格式以适应我的其他企业日志和监视软件
  • 支持日志记录级别(即调试,跟踪,错误)
  • 可以记录到磁盘以及其他目的地(即套接字,控制台等)
  • 最低配置,如果有的话
  • 在容器中工作(即Web服务器)
  • (可选,但很高兴)作为语言的一部分或作为maven工件,所以我不必破解我的构建来使用它

我知道我可以使用现有的Java日志记录解决方案,但它们至少在上面的两个方面失败了,即混乱和配置.

谢谢你的回复.

logging scala

162
推荐指数
9
解决办法
9万
查看次数

REST URL设计 - 一次HTTP调用中的多个资源

可能重复:
Rails 3自定义路由,将多个ID作为参数

根据我的理解,获取资源的好REST URL如下所示:

/resource/{id}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我经常需要获得大量的资源,同时又不想做一个单独的HTTP调用对于他们中的每一个.

是否有一个整洁的URL设计,以满足这一点,或者这不适合REST API?

api rest http

39
推荐指数
1
解决办法
2万
查看次数

如何从java.util.Map转换为Scala Map

Java API返回一个java.util.Map<java.lang.String,java.lang.Boolean>;.我想把它变成一个Map[String,Boolean]

所以想象我们有:

var scalaMap : Map[String,Boolean] = Map.empty
val javaMap = new JavaClass().map()   // Returns java.util.Map<java.lang.String,java.lang.Boolean>
Run Code Online (Sandbox Code Playgroud)

你做不到Map.empty ++ javaMap,因为++方法不了解Java地图.我试过了:

scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] {
    override def underlying = javaMap
}
Run Code Online (Sandbox Code Playgroud)

和:

scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
    override def underlying = javaMap
  }
Run Code Online (Sandbox Code Playgroud)

这些都无法编译,因为泛型 - java.lang.String与scala String不同.

有没有一种好方法可以做到这一点,而不是手动复制地图?

编辑:谢谢,所有好的答案,我从他们所有人那里学到了很多东西.但是,我在这里发布一个比我实际拥有的更简单的问题犯了一个错误.所以,如果你允许我,我会概括一个问题 - API实际返回的是什么

java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
Run Code Online (Sandbox Code Playgroud)

我需要将其移动到Map [String,Map [SomeJavaEnum,String]]

它似乎不太复杂,但它增加了额外级别的类型擦除,我发现将其移动到Scala地图的唯一方法是深度复制它(使用下面建议的一些技术) .任何提示?我通过为我的确切类型定义一个隐式转换来解决我的问题,所以至少丑陋隐藏在它自己的特性中,但仍然感觉有点笨拙的深层复制.

scala map language-interoperability scala-collections

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

Compojure从URL绑定HTTP请求参数,但不从POST表单绑定

Compojure不绑定POST表单中的字段.这是我的路线def:

(defroutes main-routes
  (POST "/query" {params :params}
    (debug (str "|" params "|"))
    "OK...")
)
Run Code Online (Sandbox Code Playgroud)

当我发布一个包含字段的表单时,我得到| {} |,即没有参数.顺便说一句,当我去http:// localhost/query?param1 = value1时,params不为空,并且值将打印在服务器控制台上.

表单字段是否有另一个绑定?

clojure compojure

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

在Clojure中将多个过滤器应用于鹅口疮中的集合

以下代码

(let [coll [1 2 3 4 5]
      filters [#(> % 1) #(< % 5)]]
  (->> coll
       (filter (first filters))
       (filter (second filters))))
Run Code Online (Sandbox Code Playgroud)

给我

(2 3 4)
Run Code Online (Sandbox Code Playgroud)

哪个好,但是如何在coll中应用所有过滤器而不必明确命名它们?

可能有更好的方法来做到这一点,但理想情况下我想知道上面可以替换(过滤器(第一个过滤器))(过滤器(第二个过滤器))的表达式.

谢谢!

clojure

9
推荐指数
2
解决办法
2122
查看次数

走路一棵树,父母先行

访问链接树的所有节点的最佳方法是什么(所有节点都引用了父节点和所有子节点,根节点的空节点为null),以便在任何节点之前没有访问任何节点?布朗尼指出非递归.

algorithm tree hierarchy

8
推荐指数
2
解决办法
8198
查看次数