- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个小程序来识别字符串中第一个重复出现的字符:
use std::io;
fn main() {
let mut main_string = String::new();
println!("Please enter the string : ");
io::stdin()
.read_line(&mut main_string)
.expect("Failed to read the input value");
main_string = main_string.trim().to_string();
println!("The trimmed string is : {}", main_string);
let repeating_character = recurring_string_parser(main_string);
println!(
"The character which is first repeating is {}",
repeating_character
);
}
fn recurring_string_parser(main_string: String) -> char {
let mut char_array = Vec::new();
for each_char in main_string.chars() {
let mut some_val = char_array.iter().find(|&&c| c == each_char);
match some_val {
Some(ch) => return each_char,
_ => println!("do nothing"),
}
char_array.push(each_char);
println!(" The charcater is {:?}", some_val);
}
return 'a';
}
错误:
error[E0502]: cannot borrow `char_array` as mutable because it is also borrowed as immutable
--> src/main.rs:31:9
|
25 | let mut some_val = char_array.iter().find(|&&c| c == each_char);
| ---------- immutable borrow occurs here
...
31 | char_array.push(each_char);
| ^^^^^^^^^^ mutable borrow occurs here
32 | println!(" The charcater is {:?}", some_val);
33 | }
| - immutable borrow ends here
我做错了什么?如果有人也能解释一下,那将会很有帮助,因为我发现很难理解可变借用的概念。
最佳答案
char_array.iter().find(|&&c| c == each_char)
的返回类型是一个 Option<&char>
;指向 char_array
中原始项目的引用.然后您尝试修改 char_array
这可能会使任何引用无效。之后,您尝试通过打印来访问现在可能无效的值。
在 C 或 C++ 等语言中,此代码是允许的,但偶尔会崩溃、损坏数据、允许任意代码执行或吃掉你的衣服。
最懒惰的解决方案是重新排序 println
并在 some_val
周围添加一组额外的大括号应该住(将来我们将拥有非词法生命周期,并且不需要额外的大括号):
{
let mut some_val = char_array.iter().find(|&&c| c == each_char);
match some_val {
Some(ch) => return each_char,
_ => println!("do nothing"),
}
println!(" The character is {:?}", some_val);
}
char_array.push(each_char);
您还可以克隆该值,打破 some_val
之间的关系和 char_array
:
let mut some_val = char_array.iter().find(|&&c| c == each_char).cloned();
另见:
关于rust - 错误[E0502] : cannot borrow `char_array` as mutable because it is also borrowed as immutable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47077709/
我有这个 C 程序: #include int main(){ char char_ar[] = "hello world."; char* char_ptr = char_ar; /*Same t
我很想知道字符串类如何实现从字符数组复制以初始化其内容。 我的猜测是这样的: 1:查找字符数组的长度,N。(这是怎么做到的?粗略的方法是单独查看每个字符,直到找到空字符?是否使用更好的方法?) 2:分
#include #include int myprint(char_array){ char mystring[80]; strcat(mystring, "\n");
我正在编写一个小程序来识别字符串中第一个重复出现的字符: use std::io; fn main() { let mut main_string = String::new(); p
我是一名优秀的程序员,十分优秀!