Ich war mit einigem Code herumspielen und machte folgende Beobachtung:Wann sind numerischen Literalen Standardtypen zugewiesen?
let x = 1;
let() = x;
error: mismatched types [E0308]
note: expected type `_`
note: found type `()`
Das ist offensichtlich nicht, aber ich habe erwartet, der Fehler, dass der erwartete Typ i32
war zu erklären, nicht _
. Ich fand heraus, dass das Gleiche mit einem Fließkomma eines nicht spezifizierten Typs geschieht, z. 1.0
.
Warum ist es so? Sollte der Typ nicht schon als Standard bekannt sein?
aktualisieren: ab Rust 1.12, ist die Fehlermeldung informative:
expected integral variable, found()
= note: expected type `{integer}`
= note: found type `()`
Ich denke, der Fehler ist zu offensichtlich. Der Typchecker ist nicht weit genug gekommen, um Standardwerte einzufügen, da dies niemals funktionieren kann. Ich habe nur die Standardwerte in Fehlermeldungen gesehen, als es eine ernste Unordnung von Schließungen und generischen Methoden war –