Functional programming 如何声明遵循函数类型的常规(非闭包)函数?

Functional programming 如何声明遵循函数类型的常规(非闭包)函数?,functional-programming,rust,Functional Programming,Rust,我有一个具有公共签名的不同排序函数集合,因此它们可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告 Rust具有用于声明函数类型的语法: type Foo = Fn(i32) -> i32; 类型Foo=Fn(i32)->i32; fn栏(函数:&Foo){ func(12); } 我搞不懂的是如何声明一个遵循函数类型的常规(非闭包)函数: //这是有效的,可以作为Foo传递,但是 //复制代码,并且不根据

我有一个具有公共签名的不同排序函数集合,因此它们可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告

Rust具有用于声明函数类型的语法:

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)
可以防止意外地“跨越流”;前者是“打印此字符串”,后者是“删除名为的文件”。函数签名充其量只是一个弱接口

另见:

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)
可以防止意外地“跨越流”;前者是“打印此字符串”,后者是“删除名为的文件”。函数签名充其量只是一个弱接口

另见:


我不知道生锈会是什么情况,我认为没有。为什么要这样做?我有一个不同的排序函数集合,它们有一个共同的签名,这样它们就可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告?还有另外一种方法,看起来你应该学会用Rust编写代码,而不是试图使用其他语言中的其他习语。如果你能提供更多的上下文,你会更容易得到帮助。问题本身是合理的,没有我的论点@brundolf确实是一个旁注,但是,它肯定不是最伟大的,而是对Rust产生影响的众多因素之一,在Haskell的例子中,这些是类型类和类型族:我不知道Rust的用例是什么,我认为没有。为什么要这样做?我有一个不同的排序函数集合,它们有一个共同的签名,这样它们就可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告?还有另外一种方法,看起来你应该学会用Rust编写代码,而不是试图使用其他语言中的其他习语。如果你能提供更多的上下文,你会更容易得到帮助。问题本身是合理的,没有我的论点@brundolf确实是一个旁注,但它肯定不是最伟大的,而是对锈迹产生影响的众多因素之一,在Haskell的案例中,这些是类型类和类型族: