对于 impl 块中的函数,我们使用以下语法:
fn test(&mut self) {}
Run Code Online (Sandbox Code Playgroud)
但对于普通函数,我们使用以下语法:
fn test(data: &mut u64) {}
Run Code Online (Sandbox Code Playgroud)
我理解self是变量,而Self是类型。在第一种情况下,我们使用&mut变量 ( self),但在第二种情况下,我们使用&mut类型 ( u64)。为什么会出现这种不一致的情况呢?
重现该问题。运行以下代码两次。首先它会正常工作。但是,当有数据要从文件中读取时,写回时会导致问题。
我假设,当文件不为空时,读取会更改类型的状态,从而File在写入时导致问题。
use std::{
fs::OpenOptions,
io::{Read, Write},
};
fn main() {
let mut file = OpenOptions::new()
.read(true)
.write(true)
.create(true)
.open("todo.txt")
.unwrap();
// Reading task before writing causing issue.
let mut read_task = String::new();
file.read_to_string(&mut read_task)
.expect("Issue reading to string");
let write_tasks = "1\n2\n3\n4\n";
file.set_len(0).expect("Issue in setting len to zero");
file.write(write_tasks.as_bytes()).expect("Issue writing to file");
}
Run Code Online (Sandbox Code Playgroud)