我有一个函数get_computer
,它将computer_key
字符串作为参数,以便在文件中找到它。代码如下:
pub fn get_computer(computer_key: String){
// read the file
let f = File::open("computer_stock.dat").expect("Error opening file"); // line 14
// create a buffer
let f = BufReader::new(f);
// Storage for the Computer Data
let mut computer_data = String::new();
// Signify that the computer name is found
let mut is_found = false;
// Loop through the lines
for lines in f.lines(){
// Get the string from the line
let lines = lines.unwrap();
// Check if it's the end of the computer's information
if is_found && lines.trim() == ";"{
break;
}
// If we found the computer, change the is_found state.
if lines == computer_key{
is_found = true;
}else{
// Otherwise, continue
continue;
}
if is_found{
computer_data.push_str(&lines);
}
}
println!("{}", computer_data);
}
但是,由于某种原因,当我调试它时,computer_key
将其值更改为Line 14
之后的""
。我的main函数只做了一个简单的调用:
fn main(){
get_computer(String::from("Computer Name A"))
}
为什么会这样?打开文件对computer_key
有影响吗?
我可以通过在Line 14
之前克隆computer_key
来解决这个问题。但是,我宁愿不这样做。
编辑:
只要意识到,即使我只是尝试在Line 14
之前执行println!("{}", computer_key);
,computer_key
也会由于某种原因而被消耗。也许是关于我的进口货
use std::fs::File;
use std::io::{BufReader, BufRead};`
经过更多的测试,我发现computer_key
没有被消耗。我用这个代码测试了一个新项目:
// Just to test if it's about the imports
use std::fs::File;
use std::io::{BufReader, BufRead};
pub fn get_computer(computer_key: String){
println!("{}", computer_key);
println!("{}", computer_key);
println!("{}", computer_key);
if computer_key == "Computer Name A"{
println!("YES");
}
}
fn main(){
get_computer(String::from("Computer Name A"))
}
调试后,YES
在终端中打印出来,但在VSCode调试器变量视图中,它包含""
。除非我把它放进watch lists
,否则它会正确显示。
我不知道为什么,但这是调试器的或VsCode的错误。我不知道发生了什么,但我在VsCode中使用了CodeLLDB。如果你们有这方面的信息,请给予我一些资源或链接。谢谢
1条答案
按热度按时间sd2nnvve1#
经过更多的测试,我发现computer_key没有被消耗。我用这个代码测试了一个新项目:
我看到的是
你是不是在某处设置了一个断点?在程序运行完成后,我不希望任何变量有任何值,我注意到vscode甚至不会在VARIABLES下列出变量名。
让调试器为变量显示空字符串
""
的唯一方法是执行以下操作: