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.)
👍 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.
Comentários muito úteis
👍 sobre como melhorar os diagnósticos aqui.
O problema é que quando o parser vê o
{
depoisRange
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 queRange
é uma estrutura, não uma constante.