欢迎!请参阅 关于 页面获取更多本网站信息。
ClojureScript 有这样的接口来暴露未声明的捕获,这在 Java 中相当于 (捕获 Throwable _)。
http://dev.clojure.org/jira/browse/CLJS-661
1) 添加 (捕获 :默认 ) 表示 (捕获 Throwable )2) 添加 (捕获 :默认 ) 表示 (捕获 Exception )3) 添加 (捕获 :all ) 表示 (捕获 Throwable )
请参阅设计页面以讨论建议:http://dev.clojure.org/display/design/Platform Errors
这个补丁比我的 CLJS 补丁更宽容:CLJS 补丁确保 :default 捕获块在非默认捕获块和(如果存在)finally 块之间。这个补丁只是将 (捕获 :default ...) 作为 (捕获 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
这似乎是一个悬而未决的问题,最好在描述中将其列出。
我并不期望在此票务或补丁上立即达成共识,只是试图更新优先级并提高讨论的可见度,一旦达到1.8,我们就可以与Rich进行讨论。
评论者:bendlas
我支持捕获Exception。在Java中(正如文档所述),它是:default,因此捕获Throwable是一个特定平台的操作,但它仍然是可能的。
现在我发现,我的最后一条评论与关于在javascript中能够捕获任何内容的讨论相矛盾。
附加的补丁v002除了:default外还实现了:all。
我发现,捕获全部与捕获Exception之间只有轻微的矛盾:(catch Exception _)在实质上可以说是java的捕获全部。由于在java中可以通过常规的catch来访问捕获全部,因此Clojure中驱动的需求并不适用于ClojureScript。Clojure中驱动的需求是可移植性。在ClojureScript中,这被混同于公开一个否则不可访问的平台功能,但这不应该驱动总体设计。
附加的v003