我是一个新手,所以如果这个问题很愚蠢,我很抱歉。我试图理解为什么TempDir
上的链接方法导致File::create
对相同Path
的调用失败。
我的情况是这样的:我正在编写一个小库来转换JSON和YAML来学习语言。我正试图写一个测试,做以下事情:
- 用json编码的文本创建一个文件
- 反序列化以确保它成为
serde_json::Value
为此,我编写了以下代码:
let temp_dir_path = TempDir::new("directory").expect("couldn't create directory");
let path = temp_dir.path().join("test-file.json");
let mut temp_file = File::create(&path).expect("failed to create file");
writeln!(temp_file, "{{"key": 2}}").expect("write failed");
// some stuff about loading the file and asserting on it
这是可行的,但我又想"为什么不把前两行合并成一行呢?"所以我试着写了下面的代码:
let path = TempDir::new("directory")
.expect("couldn't create directory")
.path()
.join("test-file.json");
let mut temp_file = File::create(&path).expect("failed to create file");
writeln!(temp_file, "{{"key": 2}}").expect("write failed");
此代码将始终失败,并显示"创建文件失败"的消息。但我不明白的是"为什么"。我的直觉是,这两个调用应该是相同的(毕竟,我基本上只是内联了一个变量);然而,这显然没有发生。是否有一些我不明白的事情发生与expect
在这里导致它不工作在这些情况下?
假设您指的是tempdir::TempDir
文档状态:
一旦
TempDir
值被删除,该路径下的目录将被删除,
,这正是语句末尾的内联变量中的临时值所发生的情况。