Functional programming 如何声明遵循函数类型的常规(非闭包)函数?
我有一个具有公共签名的不同排序函数集合,因此它们可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告 Rust具有用于声明函数类型的语法:Functional programming 如何声明遵循函数类型的常规(非闭包)函数?,functional-programming,rust,Functional Programming,Rust,我有一个具有公共签名的不同排序函数集合,因此它们可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告 Rust具有用于声明函数类型的语法: type Foo = Fn(i32) -> i32; 类型Foo=Fn(i32)->i32; fn栏(函数:&Foo){ func(12); } 我搞不懂的是如何声明一个遵循函数类型的常规(非闭包)函数: //这是有效的,可以作为Foo传递,但是 //复制代码,并且不根据
type Foo = Fn(i32) -> i32;
类型Foo=Fn(i32)->i32;
fn栏(函数:&Foo){
func(12);
}
我搞不懂的是如何声明一个遵循函数类型的常规(非闭包)函数:
//这是有效的,可以作为Foo传递,但是
//复制代码,并且不根据Foo进行检查
fn blah(x:i32)->i32{
返回x*2;
}
//这不是有效的语法
fn blah(x):Foo{
返回x*2;
}
这是其他一些具有函数类型的语言中的常见做法。是否有我不知道的语法,这是一个即将推出的功能,还是有一些技术原因阻止它被添加到Rust中
注;这样的东西也符合我的目的,尽管它会更笨重:
fn blah(x:i32)->i32{
返回x*2;
}:Foo
Rust具有用于声明函数类型的语法:
type Foo = Fn(i32) -> i32;
这不是这样一种语法(您可能会从它不符合您的要求这一事实中推断出来)。这将创建类型为dyn Fn(i32)->i32
的类型别名
通过使用函数指针并为函数创建一个未使用的变量集,您可以实现一些您想要的功能:
type MyType = fn(i32) -> i32;
fn blah(x: i32) -> i32 {
x * 2
}
const _IGNORE: MyType = blah;
然而,我同意你的评论,你正在以一种非惯用的方式进行这件事。你想创建一个东西都依附的界面,在Rust中,这是一个:
当您指的是fn(String)
时,通过提供fn(String)
可以防止意外地“跨越流”;前者是“打印此字符串”,后者是“删除名为的文件”。函数签名充其量只是一个弱接口
另见:
type Foo = Fn(i32) -> i32;
这不是这样一种语法(您可能会从它不符合您的要求这一事实中推断出来)。这将创建类型为dyn Fn(i32)->i32
的类型别名
通过使用函数指针并为函数创建一个未使用的变量集,您可以实现一些您想要的功能:
type MyType = fn(i32) -> i32;
fn blah(x: i32) -> i32 {
x * 2
}
const _IGNORE: MyType = blah;
然而,我同意你的评论,你正在以一种非惯用的方式进行这件事。你想创建一个东西都依附的界面,在Rust中,这是一个:
当您指的是fn(String)
时,通过提供fn(String)
可以防止意外地“跨越流”;前者是“打印此字符串”,后者是“删除名为的文件”。函数签名充其量只是一个弱接口
另见: