Rust中无法对&str类型使用+=赋值操作,该如何改写代码?
解决Rust中
&str无法使用+=的问题,实现类似Kotlin的字符串追加逻辑 报错原因
你遇到的二元赋值操作+=无法应用于&str类型错误,核心原因是:
""是不可变字符串切片(&str),Rust不允许修改不可变引用指向的内容+=操作符在Rust中仅支持左侧为String(可变堆分配字符串)、右侧为&str的场景,直接追加char类型也不符合语法要求
正确实现方式
方式1:用String+push(推荐,效率更高)
把初始的&str换成可变的String,用push方法追加单个字符,对应Kotlin中+= char的逻辑:
pub fn is_palindrome(x: i32) -> bool { let mut rev = String::new(); let s = x.to_string(); for n in s.chars().rev() { rev.push(n); } s == rev }
方式2:用String++=(贴近Kotlin语法习惯)
如果一定要用类似+=的写法,可以把char转为&str后追加:
pub fn is_palindrome(x: i32) -> bool { let mut rev = String::new(); let s = x.to_string(); for n in s.chars().rev() { rev += &n.to_string(); } s == rev }
注意:这种方式会为每个字符创建临时字符串,效率比push低,不推荐频繁使用。
方式3:迭代器链式调用(Rust风格,最简洁)
直接利用Rust的迭代器特性,一行完成反转和比较:
pub fn is_palindrome(x: i32) -> bool { let s = x.to_string(); s.chars().rev().collect::<String>() == s }
内容的提问来源于stack exchange,提问作者paspielka
相关产品推荐
相关产品推荐

