Rostfunktion hat keine statische Lebensdauer?

8

Ich versuche, diesen einfachen Code kompilieren zu lassen:

%Vor%

Aber es scheitert mit Rust 1.9:

%Vor%

Wie ist es möglich, dass eine freie Funktion keine statische Lebensdauer hat? Wie könnte dieser Code unsicher sein?

    
Philippe 26.06.2016, 21:08
quelle

1 Antwort

9

Der Typ von &dox ist nicht &Fn(u8) -> u8 (oder auch &fn(u8) -> u8 ), er ist lediglich erzwingbar &Fn(u8) -> u8 . Daher nehmen Sie tatsächlich die Adresse eines temporären. Provisorien werden nicht auf 'static lifetime hochgestuft, auch wenn sie im Prinzip 'static sein könnten. Zum Beispiel funktioniert dieser Code auch nicht:

%Vor%

Es gibt einige Problemumgehungen dafür. Normalerweise kann man einfach eine static Variable erstellen und den Verweis darauf nehmen:

%Vor%

In Ihrem speziellen Fall funktioniert das nicht direkt, weil Fn(u8) -> u8 ein nicht standardisierter Typ ist (speziell ein Merkmal), also können Sie das nicht einfach in ein static setzen. Sie können dies tun:

%Vor%

Eine statische Referenz auf ein Objekt Fn* ist jedoch eine ziemlich dumme Sache. Verschlüsse, die 'static Verweise sein können, sind extrem selten. Sie können also genauso gut einen einfachen fn(u8) -> u8 -Typ verwenden und das gesamte lebenslange Geschäft umgehen.

    
delnan 26.06.2016, 21:55
quelle

Tags und Links