Типы указателей на функции
Syntax
BareFunctionType →
ForLifetimes? FunctionTypeQualifiers fn
( FunctionParametersMaybeNamedVariadic? ) BareFunctionReturnType?
FunctionTypeQualifiers → unsafe? ( extern Abi? )?
BareFunctionReturnType → -> TypeNoBounds
FunctionParametersMaybeNamedVariadic →
MaybeNamedFunctionParameters | MaybeNamedFunctionParametersVariadic
MaybeNamedFunctionParameters →
MaybeNamedParam ( , MaybeNamedParam )* ,?
MaybeNamedParam →
OuterAttribute* ( ( IDENTIFIER | _ ) : )? Type
MaybeNamedFunctionParametersVariadic →
( MaybeNamedParam , )* MaybeNamedParam , OuterAttribute* ...
Типы указателей на функции, записываемые с использованием ключевого слова fn, ссылаются на функцию,
чья идентичность не обязательно известна во время компиляции.
Пример, где Binop определен как тип указателя на функцию:
#![allow(unused)] fn main() { fn add(x: i32, y: i32) -> i32 { x + y } let mut x = add(5,7); type Binop = fn(i32, i32) -> i32; let bo: Binop = add; x = bo(5,7); }
Указатели на функции могут быть созданы через приведение как из функциональных элементов, так и из незахватывающих, не-асинхронных замыканий.
Квалификатор unsafe указывает, что значение типа является небезопасной
функцией, а квалификатор extern указывает, что это внешняя функция.
Чтобы функция была вариадической, ее ABI extern должен быть одним из перечисленных в items.extern.variadic.conventions.
Атрибуты на параметрах указателей на функции
Атрибуты на параметрах указателей на функции следуют тем же правилам и ограничениям, что и обычные параметры функции.