Rust: Erro confuso ao usar um literal de estrutura como um iterador

Criado em 11 jan. 2018  ·  1Comentário  ·  Fonte: rust-lang/rust

fn main() {
    for _ in std::ops::Range { start: 0, end: 10 } {}
}

// error: expected type, found `0`
//  --> src/main.rs:2:39
//   |
// 2 |     for _ in std::ops::Range { start: 0, end: 10 } {}
//   |                                       ^ expecting a type here because of type ascription

// error[E0423]: expected value, found struct `std::ops::Range`
//  --> src/main.rs:2:14
//   |
// 2 |     for _ in std::ops::Range { start: 0, end: 10 } {}
//   |              ^^^^^^^^^^^^^^^ did you mean `std::ops::Range { /* fields */ }`?

É confuso aqui, pois sugere usar exatamente o que o usuário digitou. Em vez disso, deve sugerir que o usuário entre parênteses no literal de estrutura.
(Provavelmente há uma razão pela qual isso não é analisado como está, mas se não, parece um bom caso para lidar.)

A-diagnostics A-parser C-enhancement T-compiler

Comentários muito úteis

👍 sobre como melhorar os diagnósticos aqui.

Provavelmente há uma razão pela qual isso não é analisado como está

O problema é que quando o parser vê o { depois Range ele não sabe se é um struct literal ou o início do corpo do loop, e na hora do parse não tem ideia de que Range é uma estrutura, não uma constante.

>Todos os comentários

👍 sobre como melhorar os diagnósticos aqui.

Provavelmente há uma razão pela qual isso não é analisado como está

O problema é que quando o parser vê o { depois Range ele não sabe se é um struct literal ou o início do corpo do loop, e na hora do parse não tem ideia de que Range é uma estrutura, não uma constante.

Esta página foi útil?
0 / 5 - 0 avaliações