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 */ }`?
C'est déroutant ici, car cela suggère d'utiliser exactement ce que l'utilisateur a tapé. Il devrait plutôt suggérer à l'utilisateur de mettre entre parenthèses le littéral de structure.
(Il y a probablement une raison pour laquelle cela n'analyse pas tel quel, mais si ce n'est pas le cas, cela semble être un cas agréable à gérer.)
👍 sur l'amélioration des diagnostics ici.
Il y a probablement une raison pour laquelle cela n'analyse pas tel quel
Le problème est que lorsque l'analyseur voit le {
après Range
, il ne sait pas s'il s'agit d'un littéral de structure ou du début du corps de la boucle, et au moment de l'analyse, il n'a aucune idée que Range
est une structure, pas une constante.
Commentaire le plus utile
👍 sur l'amélioration des diagnostics ici.
Le problème est que lorsque l'analyseur voit le
{
aprèsRange
, il ne sait pas s'il s'agit d'un littéral de structure ou du début du corps de la boucle, et au moment de l'analyse, il n'a aucune idée queRange
est une structure, pas une constante.