欢迎!有关如何使用此功能,请参阅关于页面获取更多信息。
Clojurescript 具有暴露无类型捕获的功能,这与 Java 中的(catch Throwable _)等效。
http://dev.clojure.org/jira/browse/CLJS-661
1)添加(catch :default )表示(catch Throwable )2)添加(catch :default )表示(catch Exception )3)添加(catch :all )表示(catch Throwable )
请参见设计页面以讨论建议:http://dev.clojure.org/display/design/Platform Errors
此补丁比 my patch for CLJS 更宽容:CLJS 补丁确保:default 捕获块在非默认捕获块和最终块(如果存在)之间发生。此补丁使(catch :default ...)成为(catch Throwable ...)的同义词。我想尽可能减少对编译器更改的修改。
开放性问题:捕获 Throwable(修补程序 v001 执行此操作)或 Exception?或者,更细致地列出“非致命”错误。请参阅 Scala 的 NonFatal 模式提取器:https://scala-lang.org.cn/api/current/scala/util/control/NonFatal$.html
此构建基于 v001,因此同样适用条款排序的警告。
评论者:bbloom
注意到状态从"次要"变为"严重",所以我应该提及我后来意识到我们可能想要:default来捕获Exception而不是Throwable,以避免捕获Error子类。Javadoc说:"Error是Throwable的子类,表示合理的应用程序不应该试图捕获的严重问题。"如果这就是我们真正想要的,我可以提供更新的补丁。
评论者:alexmiller
这似乎是一个悬而未决的问题,最好在描述中将它列出。
我不期待在这个票或补丁上立即达成共识,只是一尝试更新优先级并提高与Rich讨论的可见性,一旦我们达到1.8.
评论者:bendlas
我支持捕获Exception。它在java中是默认的(如文档所述),所以捕获Throwable是一个特定平台的做法,但这仍然可能。
嗯,现在意识到,我最后一条评论与关于能够在javascript中捕获任何东西的设计讨论相矛盾。
附加的补丁v002实现了:all以及:default。
意识到,捕获所有与捕获Exception之间只是一种表面上的矛盾:(catch Exception _) 在所有意义上 - 是java的捕获所有。由于可以通过常规的捕获访问捕获所有,clojurescript中的主要需求并不适用于clojure。clojure中的主要需求是可移植性。在clojurescript中,这被混同于暴露一个在其他情况下不可访问的平台特性,但这不应该推动总体设计。
附加v003