我希望使我的代码更具可读性,并使用IDE代码检查和/或静态代码分析(FindBugs和Sonar)等工具来避免NullPointerExceptions.许多工具似乎与彼此的@NotNull/ @NonNull/ @Nonnull注释不兼容,并列出我的代码中的所有这些工具都很难阅读.有什么建议是"最好的"吗?这是我发现的等效注释列表:
javax.validation.constraints.NotNull
创建用于运行时验证,而不是静态分析.
文件
edu.umd.cs.findbugs.annotations.NonNull
由Findbugs静态分析使用,因此Sonar(现为Sonarqube)
文档
javax.annotation.Nonnull
这可能也适用于Findbugs,但JSR-305处于非活动状态.(另请参阅:JSR 305的状态是什么?)
来源
org.jetbrains.annotations.NotNull
由IntelliJ IDEA IDE用于静态分析.
文件
lombok.NonNull
用于控制Project Lombok中的代码生成.
占位符注释,因为没有标准.
来源,
文档
android.support.annotation.NonNull
Android中提供的标记注释,由support-annotations包
文档提供
org.eclipse.jdt.annotation.NonNull
Eclipse用于静态代码分析
文档
重新加载Clojure文件中定义的函数的首选方法是什么,而不必重新启动REPL.现在,为了使用更新的文件,我必须:
src/foo/bar.clj(load-file "src/foo/bar.clj")(use 'foo.bar)此外,(use 'foo.bar :reload-all)不会产生所需的效果,即评估修改后的函数体并返回新值,而不是表现为源根本没有改变.
有人可以向我解释一个关系数据库(例如MySQL)与Neo4j等图形数据库相比的优缺点吗?
在SQL中,您有多个表,其中各种ID链接它们.然后你必须加入连接表.从新手的角度来看,为什么要将数据库设计为需要连接,而不是将连接从一开始显示为边缘,就像使用图形数据库一样.从概念上讲,对新手来说没有任何意义.据推测,这有一个非常技术但非概念性的原因?
我有以下想要迭代的地图:
(def db {:classname "com.mysql.jdbc.Driver"
:subprotocol "mysql"
:subname "//100.100.100.100:3306/clo"
:username "usr" :password "pwd"})
Run Code Online (Sandbox Code Playgroud)
我尝试过以下操作,但不是打印键和值一次,而是重复打印键和值作为各种组合:
(doseq [k (keys db)
v (vals db)]
(println (str k " " v)))
Run Code Online (Sandbox Code Playgroud)
我想出了一个解决方案,但Brian(见下文)更符合逻辑.
(let [k (keys db) v (vals db)]
(do (println (apply str (interpose " " (interleave k v))))))
Run Code Online (Sandbox Code Playgroud) Dart有一个Map类型,有HashMap,LinkedHashMap和SplayTreeMap等实现.这些不同的Map实现之间有什么区别?
是否存在Clojure的CLOS(Common Lisp Object System)之类的东西?
我试图了解Dart 推荐的项目结构,而不是看到"穿过树林的森林".
所以,如果我的项目是旨在成为一个可重用的库,比如,某种类型的日志框架,那么,如果我理解正确上面的链接,我想我所有的发展是一个下lib和lib/src目录.
但是,如果我正在构建一个Web应用程序呢?我的Dart源文件在哪里?在packages?特别:
这里完全是菜鸟。ClojureScript我正在尝试第一次运行并遵循快速入门教程。然而,一进入...
clj --main cljs.main --compile hello-world.core --repl
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Execution error (FileNotFoundException) at clojure.main/main (main.java:40).
FileNotFoundException: Could not locate cljs/main__init.class or cljs/main.clj on classpath.
Run Code Online (Sandbox Code Playgroud) 这是用Clojure编写的数字的快速排序算法。它基本上是在“ The Clojure的喜悦”第二版(第133页)中找到的快速排序算法。我对它进行了少许修改,以期(希望)具有更好的可读性,因为原始文件感觉太紧凑了:
(defn qsort-inner [work]
(lazy-seq
(loop [loopwork work]
(let [[ part & partz ] loopwork ]
(if-let [[pivot & valuez] (seq part)]
(let [ smaller? #(< % pivot)
smz (filter smaller? valuez)
lgz (remove smaller? valuez)
nxxt (list* smz pivot lgz partz) ]
(recur nxxt))
(if-let [[oldpivot & rightpartz] partz]
(cons oldpivot (qsort-inner rightpartz))
[]))))))
(defn qsort [ xs ]
(qsort-inner (list xs)))
Run Code Online (Sandbox Code Playgroud)
该算法以调用开始,该调用将qsort传递的数字列表封装到另一个列表中(从而创建一个包含单个列表的列表),然后调用qsort-inner。
(qsort [10 4 5 88 7 1]) ;; …Run Code Online (Sandbox Code Playgroud)