小编Car*_*mez的帖子

如何在 Rust 中进行高阶组合?

我有这个有效的功能:

\n
fn compose<A, B, C>(f: impl Fn(A) -> B, g: impl Fn(B) -> C) -> impl Fn(A) -> C {\n    move |x: A| g(f(x))\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我想在这种情况下使用柯里化,这样我就可以这样做:

\n
/* THIS */\ncompose(f)(g)(x)\n\n/* Instead of this */\ncompose(f, g)(x)\n
Run Code Online (Sandbox Code Playgroud)\n

考虑制作一个宏来实现这一点是否合理?

\n
compose(f)(g)(h)\xc2\xb7\xc2\xb7\xc2\xb7(x)\n
Run Code Online (Sandbox Code Playgroud)\n

我已经设法得到与我想要的有点相似的东西:

\n
fn compose<A, B, C, F: \'static, G: \'static>(f: F) -> impl Fn(G) -> Box<dyn Fn(A) -> C>\nwhere\n    F: Fn(A) -> B + Copy,\n    G: Fn(B) -> C + Copy,\n{\n    move |g: G| Box::new(move |x: A| g(f(x)))\n}\n\nlet inc …
Run Code Online (Sandbox Code Playgroud)

functional-programming rust

7
推荐指数
1
解决办法
1666
查看次数

标签 统计

functional-programming ×1

rust ×1