let hw_ver: u8 = {
let b1 = true;
let b2 = true;
if b1 { 1 } else { 0 } |
if b2 { 2 } else { 0 }
}
println!("{}", hw_ver);
}
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=628fcda1f059a96f9d41e49ff9a9d1c8
1) нет скобок вокруг ифов 2) нет ; после let
Спасибо. Круглые скобки помогли: fn main() { let hw_ver: u8 = { let b1 = true; let b2 = true; ( if b1 { 1 } else { 0 } | if b2 { 2 } else { 0 } ) }; println!("{}", hw_ver); } Но не понимаю почему они должны обязательно быть. Может кто-нибудь объяснить?
Видимо что-то не так в парсере. Судя по грамматике ( https://doc.rust-lang.org/stable/reference/expressions/block-expr.html ) последнее выражение должно парситься как OperatorExpression -> ArithmeticOrLogicalExpression -> IfExpression | IfExpression. Возможно парсер видит if, пытыется интерпретировать выражение как ExpressionStatement -> ExpressionWithBlock, обламывается из-за |, пытается сматчить с ExpressionWithoutBlock и обламывается из-за if
Обсуждают сегодня