为什么在TempDir上的链接方法会导致文件创建失败?



我是一个新手,所以如果这个问题很愚蠢,我很抱歉。我试图理解为什么TempDir上的链接方法导致File::create对相同Path的调用失败。

我的情况是这样的:我正在编写一个小库来转换JSON和YAML来学习语言。我正试图写一个测试,做以下事情:

  1. 用json编码的文本创建一个文件
  2. 反序列化以确保它成为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值被删除,该路径下的目录将被删除,

,这正是语句末尾的内联变量中的临时值所发生的情况。

相关内容

  • 没有找到相关文章

最新更新