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

为何Rust代码调用s.f()输出1而非预期的2?

为什么调用s.f()输出1而不是2?

这是因为Rust中方法调用的优先级高于直接字段访问,你的代码里同时存在同名的方法和字段,导致调用被优先解析为方法而非字段里的函数。

具体细节:

  • 你在结构体S中定义了字段f,类型为fn();又在impl S块里定义了同名的方法f。
  • 当执行s.f()时,Rust会优先将其解析为调用impl块内的方法f——也就是那个输出1的函数,而非访问结构体字段f并调用它。

如果想要调用结构体字段里的函数,需要用括号改变优先级,先明确获取字段,再执行调用:

(s.f)(); // 这样就会输出2

修正后的完整代码示例:

struct S {
    f: fn(),
}

impl S {
    fn f(&self) {
        print!("1");
    }
}

fn main() {
    let f2 = || print!("2");
    let s = S{f: f2};
    s.f(); // 输出1,调用方法
    (s.f)(); // 输出2,调用字段中的函数
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:22:03