小编Aks*_*nna的帖子

函数指针vs Fn trait对象

fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition
    f(arg) + f(arg)
}

do_twice(|x| x + 1, 5) // call
Run Code Online (Sandbox Code Playgroud)

该函数接受闭包和函数指针.它将函数指针作为参数类型.

什么时候我应该更喜欢使用特征对象,比如&dyn Fn(i32) -> i32Box<dyn Fn(i32)-> i32>代替fn

fn do_twice(f: &dyn Fn(i32) -> i32, arg: i32) -> i32 { // definition
    f(arg) + f(arg)
}

do_twice(&|x| x + 1, 5) // call
Run Code Online (Sandbox Code Playgroud)

要么

fn do_twice(f: Box<dyn Fn(i32) -> i32>, arg: i32) -> i32 { // definition
    f(arg) + f(arg)
}
Run Code Online (Sandbox Code Playgroud)

closures function traits rust trait-objects

3
推荐指数
2
解决办法
495
查看次数

标签 统计

closures ×1

function ×1

rust ×1

trait-objects ×1

traits ×1