TL; DR: Der RFC ist akzeptiert, aber Ihre Syntax ist leicht aus (leider) und das Feature ist noch gated.
Siehe Alecs ausgezeichnete Antwort auf, wie man tatsächlich catch
verwendet.
Ich ermutige Sie, die voll Fehlerprotokoll zu lesen:
error: expected identifier, found `1`
--> <anon>:2:21
|
2 | let x = catch { 1 };
| ^
error[E0422]: cannot find struct, variant or union type `catch` in this scope
--> <anon>:2:13
|
2 | let x = catch { 1 };
| ^^^^^ not found in this scope
error: aborting due to 2 previous errors
Der Schlüssel ist in der zweiten Fehlermeldung:
cannot find struct, variant or union type catch
in this scope
, die uns wirklich, dass catch
wissen lässt, wird vom Compiler nicht als Schlüsselwort erkannt.
Da catch
wie jedes normale Wort aussieht, versucht der Compiler, dies als struct
oder enum
zu analysieren. Tatsächlich ein struct
oder enum
die Syntax für den Aufbau ist:
struct X { name: i32 }
let x = X { name: 1 };
Daher ist der Compiler sieht <identifier> {
und erwartet, dass es durch eine Liste von <identifier>: <expression>
folgen. Es liest 1
, die keine Kennung ist, und meldet den Fehler 1
ist kein Bezeichner.
Eigentlich nur der Fragezeichen-Operator ist in der Sprache gerade jetzt. Dieser Link verweist lediglich auf einen RFC. –
Die Chancen stehen gut, dass die meisten Leute sowieso nicht 'catch' verwenden wollen. Es ist meiner Meinung nach kein gebräuchliches Ding. – Shepmaster
Ich würde vorschlagen, dass Sie Alecs Antwort anstelle von mir akzeptieren: zu erklären, warum die Fehlermeldung cool ist und alles, aber zu erklären, wie Sie 'catch' tatsächlich verwenden, ist wahrscheinlich nützlicher :) Kein Druck obwohl, und Sie sind frei, jede Antwort zu akzeptieren du möchtest. –