Exception handling 如何使用?生锈了吗?
看起来,但我不能正确使用它:Exception handling 如何使用?生锈了吗?,exception-handling,rust,try-catch,Exception Handling,Rust,Try Catch,看起来,但我不能正确使用它: let x = catch { 1 } 我想这应该给我Ok(1)。相反,我得到了一个错误: 错误:应为标识符,找到`1` -->src/main.rs:15:9 | 15 | 1 | ^ Rust还不支持这种语法,还是我的代码有问题?TL;DR:RFC是可以接受的,但您的语法有点不正确(不幸的是),并且该功能仍然处于选通状态。 参见Alec关于如何实际使用catch的精彩回答 我建议您阅读完整的错误日志: 因此,编译器看
let x = catch {
1
}
我想这应该给我Ok(1)
。相反,我得到了一个错误:
错误:应为标识符,找到`1`
-->src/main.rs:15:9
|
15 | 1
| ^
Rust还不支持这种语法,还是我的代码有问题?TL;DR:RFC是可以接受的,但您的语法有点不正确(不幸的是),并且该功能仍然处于选通状态。 参见Alec关于如何实际使用
catch
的精彩回答
我建议您阅读完整的错误日志:
因此,编译器看到
{
并希望它后面跟着一个:
列表。它读取1
,这不是标识符,并报告错误,即1
不是标识符。TL;DR:RFC被接受,但您的语法有点不正确(不幸的是)而且该功能仍处于选通状态。
参见Alec关于如何实际使用catch
的精彩回答
我建议您阅读完整的错误日志:
因此,编译器看到
{
并希望它后面跟着一列:
。它读取1
,这不是一个标识符,并报告1
不是标识符的错误。这听起来非常愚蠢,因为它有点像。你需要
#![feature(catch_expr)]
fn main() {
let x = do catch {
1
};
}
基本上,catch
,比如default
和union
,如果不破坏向后兼容性,就不能成为关键字。因为Rust试图保证1.x上的任何代码在1.y上仍然有效,所以引入了default
,union
,现在语法中的catch
都是关于fig的消除冲突。对于联合
和默认
,没有-在这些位置不需要标识符
对于catch
,catch{1}
也可以解释为结构文字。除非您要求do
(保留关键字)出现在catch
之前,否则没有歧义。是的,这很难看,每个人都知道
希望当2.0出现时,这些噩梦会消失,我们可以打破向后兼容性。引自:
有越来越多的其他语法我们最终希望以这种方式重新调整用途,但我们通常避免破坏在1.x on 1.y上运行代码的能力,其中y>x,除非代码利用了编译器错误或只是一个非常罕见的构造。我们的稳定性保证要求我们等到2.0时才运行m其中大部分
这听起来很蠢,因为它有点蠢。你需要
#![feature(catch_expr)]
fn main() {
let x = do catch {
1
};
}
基本上,catch
,比如default
和union
,如果不破坏向后兼容性,就不能成为关键字。因为Rust试图保证1.x上的任何代码在1.y上仍然有效,所以引入了default
,union
,现在语法中的catch
都是关于fig的消除冲突。对于联合
和默认
,没有-在这些位置不需要标识符
对于catch
,catch{1}
也可以解释为结构文字。除非您要求do
(保留关键字)出现在catch
之前,否则没有歧义。是的,这很难看,每个人都知道
希望当2.0出现时,这些噩梦会消失,我们可以打破向后兼容性。引自:
有越来越多的其他语法我们最终希望以这种方式重新调整用途,但我们通常避免破坏在1.x on 1.y上运行代码的能力,其中y>x,除非代码利用了编译器错误或只是一个非常罕见的构造。我们的稳定性保证要求我们等到2.0时才运行m其中大部分
事实上,目前语言中只有问号运算符。该链接仅指向RFC。大多数人很可能不想使用
catch
。在我看来,这不太可能是常用的。我建议你接受Alec的答案,而不是我的:解释错误消息为什么很酷和有趣所有,但解释如何实际使用catch
可能更有用:)尽管没有压力,您可以自由地接受任何您想要的答案。这是Rust编译器的问题,因为它无法输出正确的错误消息。实际上,目前该语言中只有问号运算符。该链接仅指向RFC.Chances很好,因为大多数人无论如何都不想使用catch
。在我看来,它不太可能是一种常用的东西。我建议你接受Alec的答案,而不是我的答案:解释为什么错误消息很酷,但解释如何实际使用catch
,可能更有用:)不过没有压力,而且你可以自由地接受任何你想接受的答案。这是Rust编译器的问题,因为它无法输出正确的错误消息。当2.0出现时——没有关于Rust 2.0的计划,甚至有人可能会说有反计划——没有人会因为不愿意在Rust目标。@Shepmaster我希望你是错的。:)TBH,对于很多这样的更改,实际上很少有代码会中断-问题是人们可以想象代码可能会中断。从长远来看,让联合
成为一个关键字可能是一个非常好的主意-但这应该是一个非常缓慢的过程。首先是警告“union
将成为一个关键字,不要将其用作变量”,然后是一个可以用标志禁用的错误,最后是一个硬错误。否则,Rust的语法将与C++的语法相同。由于前面的注释已做出,请继续
#![feature(catch_expr)]
fn main() {
let x = do catch {
1
};
}