当前位置: 首页 > 知识库问答 >
问题:

为什么std::fs::write(…)使用内在功能?

强金鑫
2023-03-14

我是生锈新手,一直在浏览源代码,发现了这个:

#[stable(feature = "fs_read_write_bytes", since = "1.26.0")]
pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> io::Result<()> {
    fn inner(path: &Path, contents: &[u8]) -> io::Result<()> {
        File::create(path)?.write_all(contents)
    }
    inner(path.as_ref(), contents.as_ref())
}

这个函数定义这样的内部函数有什么原因吗?为什么不直接写:

File::create(path.as_ref())?.write_all(contents.as_ref())

共有1个答案

梁季
2023-03-14

单一化成本。

write(),就像Rust中的大多数文件系统函数一样,将作为参考

为了降低成本,它调用了一个内部的、非通用的函数来完成所有繁重的工作。外部函数只包含必要的通用代码——到路径的转换。

 类似资料:
  • 我是个新手,一直在浏览源代码,发现: 这个函数定义这样的内部函数有什么原因吗?为什么不直接写:

  • 关于在最新版本的GCC和Clang中编译有几个问题:实验::filessystems链接器错误 但是现在< code>filesystem已经被c 17接受,所以不再需要< code>experimental或< code>-lstdc fs标志,对吗? 错了,我甚至不能 只给了我< code >实验版本,我怎么能包括正式接受的版本呢?

  • 在过去的几个月里,我一直在学习C语言并使用终端。我的代码使用g和c11编译并运行得很好,但在过去几天里它开始出现错误,此后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C标准。 我第一次遇到的错误包括 尝试使用ecg$g-o stoi_试验stoi_试验编译。cpp-std=c 11 大堆cpp:13:22:错误:命名空间“std”中没有名为“stoi”的成员;你是说“阿托伊”吗?in

  • https://godbolt.org/z/P97MaK 我玩的概念和预期d::is_equality_comparable工作矢量,但它没有。 编译错误在 内部失败,而不是在受概念保护的函数边界处失败。 这是错误还是预期行为?

  • 在我的clang和libc版本中(靠近),这个传递: 当然,如果你真的试图复制构造一个唯一指针的向量,它无法编译: 我假设这种情况是因为