何时使用if-let
而不是let
使代码看起来更好,它是否会对性能产生影响?何时使用Clojure中的let vs if-let
31
A
回答
69
我想if-let时,应使用你想在代码中的“then
”部分引用if
条件的值:即
代替
(let [result :foo]
(if result
(do-something-with result)
(do-something-else)))
你写:
(if-let [result :foo]
(do-something-with result)
(do-something-else))
这是一个小整理者,并且可以节省您进一步缩进级别。至于效率会,你可以看到,宏扩展不会增加太多开销:
(clojure.core/let [temp__4804__auto__ :foo]
(if temp__4804__auto__
(clojure.core/let [result temp__4804__auto__]
(do-something-with result))
(do-something-else)))
这也说明了绑定不能在代码中的“else
”的部分被称为。
30
if-let
的一个很好的用例是消除了使用回指的需要。例如,Arc编程语言提供了一个名为aif
的宏,它允许您在给定表达式求值为逻辑真时,将一个名为it
的特殊变量绑定在if
表单的正文中。我们可以用Clojure创建同样的事情:
(defmacro aif [expr & body]
`(let [~'it ~expr] (if ~'it (do [email protected]))))
(aif 42 (println it))
; 42
这是优秀和良好,但照应不嵌套,但if-let
作用:
(aif 42 (aif 38 [it it]))
;=> [38 38]
(aif 42 [it (aif 38 it)])
;=> [42 38]
(if-let [x 42] (if-let [y 38] [x y]))
;=> [42 38]
+0
发现非常有用。 – octopusgrabbus 2012-01-12 22:45:10
相关问题
- 1. 方案:何时使用let,let *和letrec?
- 2. let vs letfn在clojure中定义本地函数?
- 3. 使用Clojure中的let/fn匹配参数
- 4. Return语句VS GUARD LET
- 5. clojure when-let替代一个空阵列?
- 6. 在Swift 2中使用var vs let让地图
- 7. Clojure:在一个惯用的Clojure时尚中使用java.util.HashMap
- 8. 何时使用Clojure的关闭?
- 9. Clojure的let绑定表单中下划线的用法是什么?
- 10. Javascript ES6导出常量vs导出let
- 11. Clojure的if-let有Java的等价物吗?
- 12. let在Haskell中的用法
- 13. 状态monad vs Clojure中的原子
- 14. 在clojure中使用循环时溢出
- 15. 何时使用SQLITE_TRANSIENT vs SQLITE_STATIC?
- 16. 何时使用add_action vs add_filter?
- 17. 何时使用collection vs shard?
- 18. 何时使用ReactiveDict vs ReactiveVar
- 19. 何时使用ServiceTracker vs ServiceReference
- 20. HDFS vs GridFS:何时使用?
- 21. 何时使用VirtualAlloc Vs新?
- 22. 何时使用AlertDialog.Builder.setTitle()vs Dialog.setTitle()?
- 23. 如何使用Clojure的PersistentQueue?
- 24. Clojure中使用SUBSEQ
- 25. 为什么在函数中使用* let *?
- 26. 何时在ExecutorCompletionService中使用poll()vs take()
- 27. 什么时候应该在TypeScript中使用“var”,“let”和“const”
- 28. 为什么在使用let(ES6)时不需要使用闭包?
- 29. 如何在Eclipse中使用逆时针编译的Clojure类
- 30. 并发模型:Erlang vs Clojure
此外,也不可能有超过2在if-let的绑定向量中形成。例如:(if-let [a 20b nil](println a)) - 不起作用! – 2010-06-04 11:18:56
还有'当 - 让'。 – 2013-01-04 22:49:42