热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

是println!表达或陈述?

如何解决《是println!表达或陈述?》经验,为你挑选了1个好方法。

我正在研究Rust文档(书),并对使用分号分隔语句感到困惑.

在一个示例中,它使用println!宏作为以分号结束的语句:

use std::cmp::Ordering;

fn cmp(a: i32, b: i32) -> Ordering {
    if a  b { Ordering::Greater }
    else { Ordering::Equal }
}

fn main() {
    let x = 5;
    let y = 10;

    let ordering = cmp(x, y);

    if ordering == Ordering::Less {
        println!("less");
    } else if ordering == Ordering::Greater {
        println!("greater");
    } else if ordering == Ordering::Equal {
        println!("equal");
    }
}

当使用match表达式来简化它时...

use std::cmp::Ordering;

fn cmp(a: i32, b: i32) -> Ordering {
    if a  b { Ordering::Greater }
    else { Ordering::Equal }
}

fn main() {
    let x = 5;
    let y = 10;

    match cmp(x, y) {
        Ordering::Less => println!("less"),
        Ordering::Greater => println!("greater"),
        Ordering::Equal => println!("equal"),
    }
}

分号消失了,表明这println!不是一个陈述,而是在这种情况下的表达.我不明白为什么......我错过了什么?



1> 小智..:

println!()是一个扩展到表达式的宏.它没有有用的返回值,但它一个表达式(主要是因为几乎所有东西都是表达式,包括函数调用和块).

有一个约定 - 我不知道它是多么常见,但我跟随它 - 将生成()函数调用视为伪语句,仅用于它们的副作用,因此即使没有分号也会以分号终止它们严格必要的.这是在第一个片段中完成的.

在第二个片段中,我们有一个match,匹配的武器期待一个表达式.一个人可以使用一个块(Ordering::Less => { println!("less"); }),但这是一个相当多的句法噪音,只是为了更清楚,武器被用于他们的副作用,所以我想作者只是把它关闭.


推荐阅读
author-avatar
老美1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有