我在写锈皮棉插件时,我发现,锈使用不同类型的代表则(Block)和其他(Expr一)的部分if在这两个声明libsyntax::ast::ExprKind和librustc::hir::Expr_.
我需要他们两个都有共同的类型.
我应该只使用明确的匹配hir::Expr_::ExprBlock,否则部分可能是其他东西,我需要进行更智能的比较?
从来源:
// ...
pub enum Expr_ {
// ...
/// An `if` block, with an optional else block
///
/// `if expr { block } else { expr }`
ExprIf(P<Expr>, P<Block>, Option<P<Expr>>),
// ...
}
// ...
Run Code Online (Sandbox Code Playgroud)
这是我们可以区分的
if x {
foo();
} else if y {
bar();
}
Run Code Online (Sandbox Code Playgroud)
从
if x {
foo();
} else { // note the block
if y {
bar();
}
}
Run Code Online (Sandbox Code Playgroud)
第一个ExprIf在else的节点中Expr有一个 - 而第二个有一个ExprBlock包含单个ExprIf表达式.
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |