What the function types are is vague
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Dokumentation
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- rust
- Bereich
- documentation
Rechercherichtung
Beginne mit dem Abschnitt zu Aufrufausdrücken in der Rust Reference und der in der Issue verlinkten Dokumentation zu fn aus der Standardbibliothek und vergleiche anschließend deren Beschreibungen mit dem Beispiel für einen unsafe-Funktionszeiger. Kläre, was den Aufrufausdruck gültig macht, und unterscheide zwischen Funktionselementtypen sowie sicheren und unsafe-Funktionszeigern; abgeschlossen, wenn die Formulierung in der Reference die angegebene Mehrdeutigkeit auflöst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Call expressions - The Rust Reference says:
For non-function types, the expression f(...) uses the method on one of the following traits based on the function operand:
- Fn or AsyncFn — shared reference.
- FnMut or AsyncFnMut — mutable reference.
- FnOnce or AsyncFnOnce — value.
The non-function types, as indicated by the link, refer to function item types.
Consider this example:
unsafe fn foo(i:i32){}
fn main(){
let f = foo as unsafe fn(i32);
unsafe{
f(0);
}
}
f is of type unsafe function pointer, fn - Rust says:
In addition, all safe function pointers implement Fn, FnMut, and FnOnce, because these traits are specially known to the compiler.
The wording emphasizes safe; in other words, unsafe function pointers don't implement Fn, FnMut, and FnOnce. Furthermore, the (unsafe)function pointers aren't function item types, so why is f(0) a valid call expression?
More details can be seen https://users.rust-lang.org/t/why-can-the-unsafe-function-pointer-be-as-the-function-operand/133182
- Vorherrschende Sprache
- Rust
- Sterne
- 1.6k
- Forks
- 618
- Ø Merge
- 5 Std. 48 Min.
- Gemergte PRs (30 T.)
- 3
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus rust-lang/reference
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
A-const-eval A-undefined-behavior
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
rust-lang/reference#2266 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
A-resolve
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in rust-lang/reference
Ähnliche Issues
-
good first issue help wanted program
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
hffgzktbcc-blip/ounce-core#297 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
nautechsystems/nautilus_trader#5631 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 69/100
bytecodealliance/rustix#1736 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
longbridge/gpui-kit#3871 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:models enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag