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

Rustlings学习疑问:push_str返回()而非String的原因

Rustlings AppendBar 实现问题解答

push_str返回单元类型()是Rust的设计惯例——原地修改对象的方法通常返回(),这样能清晰传递“操作直接改变原实例,不生成新对象”的语义,避免调用者误以为会得到一个新字符串。

你写的两段代码报错的核心原因一致:方法声明要返回Self(即String),但函数最后一行返回的是push_str的结果(),类型不匹配。哪怕把self存入contain变量,最后一行依然是push_str的返回值,所以错误不会消失。

正确实现方式

直接在修改后返回self(注意要将self标记为mut,因为push_str需要可变引用):

impl AppendBar for String {
    fn append_bar(mut self) -> Self {
        self.push_str(" bar");
        self
    }
}

或者沿用你第二个示例的变量写法,最后返回修改后的变量:

impl AppendBar for String {
    fn append_bar(self) -> Self {
       let mut contain = self;
       contain.push_str(" bar");
       contain
    }
}

关键注意点

  • 必须保证self(或存储它的变量)是可变的,否则无法调用push_str
  • 调用push_str后需要显式返回修改后的实例,才能满足方法返回Self的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:40:48