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
相关产品推荐
相关产品推荐

