今天说点clojure的东西。大家可能都听说过kickstarter上的一个IDE项目叫LightTable的吧,这款最开始主打clojure编程的IDE筹到了一大笔钱,现在已经放出来好几个试用版了。最新的一个版本支持一个叫做custom expression的功能,允许用户选中任意块代码,将代码替换为这段代码的执行结果。
clojure里现在有一个lib叫做kitbit,它是一个clojure的静态代码解析和替换工具,具体就是可以分析你的一部分clojure代码块,然后看这段代码有没有对应的惯用实现,如果有的话可以选择将自己的代码替换为惯用实现。这有点像intellij里面的功能,可以把有些用法例如? :
三元运算符替换为if else
。比如:
At src/overtone/examples/compositions/jazz.clj:114:
Consider using:
(inc beat)
instead of:
(+ beat 1)
kitbit有emacs的插件,也就是说在emacs里面配置好了以后也可以实现一键代码分析和重构了。至于这些惯用法,我们是可以自定义的,看了一下它的默认设置,默认的内容挺简单的:
(defrules rules
[(if ?x ?y nil) (when ?x ?y)]
[(if ?x nil ?y) (when-not ?x ?y)]
[(if ?x (do . ?y)) (when ?x . ?y)]
[(if (not ?x) ?y ?z) (if-not ?x ?y ?z)]
[(when (not ?x) . ?y) (when-not ?x . ?y)]
[(do ?x) ?x]
[(if-let ?binding ?expr nil) (when-let ?binding ?expr)]
[(when ?x (do . ?y)) (when ?x . ?y)]
[(when-not ?x (do . ?y)) (when-not ?x . ?y)]
;; suggest `while` for bindingless loop-recur
[(loop [] (when ?test . ?exprs (recur)))
(while ?test . ?exprs)]
[(let ?binding (do . ?exprs)) (let ?binding . ?exprs)]
最后看看这个能贴在纸上的电路,有各种传感器,还可以编程。
网友评论