Haskell的翻页功能定义如下:
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x
Run Code Online (Sandbox Code Playgroud)
它所做的只是获取一个函数并返回另一个具有两个相反参数的函数。如果你调用的函数f
为f a b
(f(a, b)
鲁斯特的语法),你会叫flip f
的(flip f) b a
。
我在Rust中编写此文件的尝试失败:
fn flip<A, B, C, F: Fn(A, B) -> C>(f: F) -> impl Fn(B, A) -> C {
|a, b| f(b, a)
}
Run Code Online (Sandbox Code Playgroud)
可以用Rust写这个吗?
ape*_*lla 10
我不确定您遇到什么错误,但是我可以使用以下代码(用于测试的操场链接)正确实现它:
fn flip<A, B, C, F>(f: F) -> impl Fn(B, A) -> C where F: Fn(A, B) ->C {
move |a,b| f(b, a)
}
fn main() {
let sub = |a, b| a - b;
let flipped = flip(sub);
println!("Result: {}", flipped(5, 10));
}
Run Code Online (Sandbox Code Playgroud)
请注意move
此处的关键字,该关键字是强制由返回的闭包flip
获得的所有权的关键字f
。
归档时间: |
|
查看次数: |
151 次 |
最近记录: |