gpt4 book ai didi

rust - 为什么 Rust 的 if-else AST 对 then 和 else 使用不同的类型?

转载 作者:行者123 更新时间:2023-11-29 07:42:52 25 4
gpt4 key购买 nike

当我发现 Rust 使用不同的类型来表示 then (Block) 和 else (Expr) if 语句的一部分,在 libsyntax::ast::ExprKindlibrustc::hir::Expr_ 中.

我需要它们都有共同的类型。

我是否应该只对 hir::Expr_::ExprBlock 使用显式匹配,否则部分可能是其他内容,我需要进行更智能的比较?

来自 the source :

// ...
pub enum Expr_ {
// ...
/// An `if` block, with an optional else block
///
/// `if expr { block } else { expr }`
ExprIf(P<Expr>, P<Block>, Option<P<Expr>>),
// ...
}
// ...

最佳答案

这样我们就可以区分了

if x {
foo();
} else if y {
bar();
}

来自

if x {
foo();
} else { // note the block
if y {
bar();
}
}

第一个在 else-Expr 的节点中有一个 ExprIf 而第二个有一个包含单个 ExprIf 的 ExprBlock -表达式。

关于rust - 为什么 Rust 的 if-else AST 对 then 和 else 使用不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com