У меня есть коллекция различных функций сортировки с общей подписью, поэтому они могут быть взаимозаменяемо переданы другим функциям. Я хочу иметь возможность объявить inline, что каждый из них должен соответствовать одной и той же подписи, поэтому я буду предупрежден контекстуально, если один из них порвет с этим.
Rust имеет синтаксис для объявления типов функций:
type Foo = Fn(i32) -> i32;
fn bar(func: &Foo) {
func(12);
}
Я не могу понять, как объявить обычную (незамкнутую) функцию, которая соответствует типу функции:
// this works and can be passed as a Foo, but
// duplicates code and isn't checked against Foo
fn blah(x: i32) -> i32 {
return x * 2;
}
// this isn't valid syntax
fn blah(x): Foo {
return x * 2;
}
Это распространенная практика в некоторых других языках, которые имеют типы функций. Есть ли синтаксис, о котором я не знаю, это будущая функция или есть какая-то техническая причина, препятствующая его добавлению в Rust?
Примечание; что-то вроде этого также послужило бы моей цели, хотя это было бы более неуклюже:
fn blah(x: i32) -> i32 {
return x * 2;
}: Foo