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:
Es gibt einige Problemumgehungen dafür. Normalerweise kann man einfach eine static
Variable erstellen und den Verweis darauf nehmen:
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:
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.