如何定义带返回值的函数指针?Rust回调函数报错解决
修复Rust回调函数类型不匹配问题
你的代码编译失败的核心原因是函数指针类型不匹配:use_callback中定义的参数callback: fn()要求传入的函数返回空单元类型(),但你实际传入的callback函数返回的是i32,两者签名不兼容。
以下是两种可行的修复方案:
方案1:指定函数指针的返回类型
直接在函数指针类型里明确返回值为i32,和传入的函数签名保持一致:
fn use_callback(callback: fn() -> i32) -> i32 { callback() } fn callback() -> i32 { 2 } fn main() { println!("Result: {:?}", use_callback(callback)); }
方案2:用泛型支持任意可调用类型
如果需要更灵活的回调(比如支持闭包),可以结合Fn trait和泛型实现:
fn use_callback<F: Fn() -> i32>(callback: F) -> i32 { callback() } fn callback() -> i32 { 2 } fn main() { println!("Result: {:?}", use_callback(callback)); // 也可以直接传入闭包 println!("Result: {:?}", use_callback(|| 3)); }
运行任意一种方案,都能得到你预期的输出:Result: 2
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

