请分享您的想法,参加 2024 年 Clojure 状态调查!

欢迎!请参阅 关于 页面获取更多本网站信息。

+8 投票
Clojure

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

补丁

v001 仅实现 1)

这个补丁比我的 CLJS 补丁更宽容:CLJS 补丁确保 :default 捕获块在非默认捕获块和(如果存在)finally 块之间。这个补丁只是将 (捕获 :default ...) 作为 (捕获 Throwable ...) 的同义词。我想尽量减少对编译器的修改。

开放性问题:捕获 Throwable(补丁 v001 实现)还是 Exception?或者,一个更精心编制的非致命错误列表。请参阅 Scala 的 NonFatal 提取器:https://scala-lang.org.cn/api/current/scala/util/control/NonFatal$.html

v002 实现 2) + 3)

这个版本基于 v001,因此同样适用于条款顺序方面的注意事项。

v003 仅实现 2)

这个版本基于 v001,因此同样适用于条款顺序方面的注意事项。

6 答案

+1 投票
参考: https://clojure.atlassian.net/browse/CLJ-1293(由 bbloom 报告)
0 投票

评论作者:bbloom

注意到这一项已经从“次要”变更为“关键”,因此我认为我应该指出:稍后我意识到我们可能希望:default为捕获Exception而非Throwable,以避免捕获Error子类。Javadoc中写道:“Error是Throwable的子类,表示合理的应用程序不应尝试捕获的严重问题。”如果这正是我们想要的,我可以提供一个更新后的补丁。

0 投票

评论者:alexmiller

这似乎是一个悬而未决的问题,最好在描述中将其列出。

我并不期望在此票务或补丁上立即达成共识,只是试图更新优先级并提高讨论的可见度,一旦达到1.8,我们就可以与Rich进行讨论。

0 投票

评论者:bendlas

我支持捕获Exception。在Java中(正如文档所述),它是:default,因此捕获Throwable是一个特定平台的操作,但它仍然是可能的。

0 投票

评论者:bendlas

现在我发现,我的最后一条评论与关于在javascript中能够捕获任何内容的讨论相矛盾。

附加的补丁v002除了:default外还实现了:all。

0 投票

评论者:bendlas

我发现,捕获全部与捕获Exception之间只有轻微的矛盾:(catch Exception _)在实质上可以说是java的捕获全部。由于在java中可以通过常规的catch来访问捕获全部,因此Clojure中驱动的需求并不适用于ClojureScript。Clojure中驱动的需求是可移植性。在ClojureScript中,这被混同于公开一个否则不可访问的平台功能,但这不应该驱动总体设计。

附加的v003

...