V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
rustacean
V2EX  ›  Rust

Rust 中 println! 是 expression 还是 statement ?

  •  
  •   rustacean · Dec 28, 2016 via iPhone · 5127 views
    This topic created in 3412 days ago, the information mentioned may be changed or developed.
    在看 *The Rust Programming Language* 的时候 Functions 这一节讲到 expression 和 statement 的区别。想弄明白 *println!* 是 expression 还是 statement . 找到这两篇答案:

    - 是 [statement]( https://users.rust-lang.org/t/expression-statements/7733)
    >since it has a semicolon, it's a statement. And if you have a block like { statement; statement; expression } then that final expression becomes the value for the whole block.

    - 是 [expression]( http://stackoverflow.com/a/28439789/4974466)
    >'println!()' is a macro expanding to an expression. It has no useful return value, but it is an expression (mostly because almost everything is an expression, including function calls and blocks).
    能有前辈解释一下正确的理解是什么嘛?
    6 replies    2018-09-04 20:14:34 +08:00
    realwangyibo
        1
    realwangyibo  
       Dec 28, 2016
    println!("Naive")是表达式,宏展开是表达式,表达式的值是 ()

    表达式语句是在表达式后跟分号,将表达式变成语句, println!("Naive");是语句
    realwangyibo
        2
    realwangyibo  
       Dec 28, 2016
    鄙人认为,表达式是无法被执行的,只有语句可以。

    do_something_with_vector(&mut vector) 是函数调用表达式,只是相当于把干柴堆好。

    do_something_with_vector(&mut vector); 是函数调用(表达式)语句,在堆好干柴的情况下点一把火。

    ; 也是语句,只不过没有柴,点多少次火都没什么用。
    rustacean
        3
    rustacean  
    OP
       Dec 28, 2016 via iPhone
    @realwangyibo 谢谢您
    peng1999
        4
    peng1999  
       Dec 29, 2016 via Android
    @realwangyibo 我倒觉得表达式的求值过程才是算程序的执行,分号只是在多个表达式顺序求值是使用。例如,最后一个语句是可以不写分号的。
    realwangyibo
        5
    realwangyibo  
       Dec 29, 2016 via iPhone
    @peng1999 block 是表达式, block 的值取决于最后的表达式的值。如果最后的是语句,则 block 的值是(),所以最后不写分号的,是表达式而不是语句。

    求值的方式是表达式规定的,但「求值」这个动作是表达式语句执行的。
    sidgwick
        6
    sidgwick  
       Sep 4, 2018
    @realwangyibo 求值也是表达求值吧, 语句是没有值的. 还有 Rust 里面是不是没有表达式语句这种说法?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1111 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 17:31 · PVG 01:31 · LAX 10:31 · JFK 13:31
    ♥ Do have faith in what you're doing.