Rust glob函数代表什么时间?

时间:2019-07-14 18:25:17

标签: rust glob

Rust glob板条箱相当简单,只要在执行过程中不添加任何文件即可。但是,如果文件系统的状态发生变化,会发生什么?

请考虑以下情况:

// The folder contains a cute giraffe and a cute zebra.
let mut animals = glob("images/cute_*.jpg");
// A cute cat is added to the folder.
let first = animals.next();
// A cute dog is added to the folder.
let second = animals.next();

第一和第二是什么?长颈鹿和斑马?猫和狗?

用更专业的术语重新表达这个问题:glob代表文件系统的快照吗?也许当迭代开始时?还是“实时”找到最近添加的文件?

1 个答案:

答案 0 :(得分:3)

the source code for glob,您会看到:

  • 在您第一次致电next之前,它实际上并没有做任何事情,因此在您的示例中它将看到那只猫。
  • 它会在第一次需要时立即读取整个目录,因此在您的示例中它将看不到狗。
  • 当模式与多个目录匹配时,它将一一读取它们,因此在开始处理该特定目录之前添加到目录中的所有文件都将可见。一旦开始处理目录,该列表将被冻结,并且将看不到新文件。

在您的示例中,它将以不特定的顺序返回长颈鹿,斑马和猫。

但是请注意,这只是查看当前的代码,如果修改了代码,行为可能会改变。