You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust泛型函数如何接收fn(T)->T类型的函数参数?

解决Rust泛型函数参数声明的编译错误

你的代码存在两个关键语法错误,导致编译器报错,以下是修正方案和说明:

错误代码回顾

fn test<T>(fn(T) -> T, y: T) -> T {
    return test(fn(T) -> T, fn(y));
}

错误原因与修正

  1. 参数缺少标识符:Rust要求函数的每个参数必须指定名称(标识符),不能只写类型。你需要给第一个函数类型的参数命名,比如f。
  2. 递归调用参数错误:递归调用test时,你错误地传入了类型fn(T)->T作为第一个参数,同时错误地使用fn(y)这种语法调用函数,正确的方式是使用已命名的参数f来调用,即f(y)。

修正后的基础代码

fn test<T>(f: fn(T) -> T, y: T) -> T {
    test(f, f(y))
}

注意事项

上述修正后的代码虽然能通过编译,但没有递归终止条件,运行时会直接导致栈溢出。实际使用时需要添加终止逻辑,比如当函数调用结果与输入相等时停止递归(需要T实现PartialEq trait):

fn test<T>(f: fn(T) -> T, y: T) -> T
where
    T: PartialEq,
{
    let result = f(y);
    if result == y {
        result
    } else {
        test(f, result)
    }
}

内容的提问来源于stack exchange,提问作者user21559142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:42:35