gpt4 book ai didi

rust - 为什么 Read::read_to_string() 不返回字符串?

转载 作者:行者123 更新时间:2023-11-29 07:52:10 26 4
gpt4 key购买 nike

Read trait , 许多函数/方法采用 buf: &mut XXX作为(其中一个)参数并返回 Result<usize> .例如, read_to_string() 需要 buf: &mut String作为参数之一并返回 Result<usize> .

由于我来自多种语言,所谓的现代 语言通常返回 read_string() 的字符串函数调用。 Read的设计Rust 中的特征让我有点震惊,因为它不返回 字符串,而是将它作为参数传递(类似于 C 或其他更原始的语言)。

我知道返回值(Result)用于指示读取是否成功,可以将其传递给match。表达式。 (我以前学过 Lisp 和 Go,所以我不质疑这种设计。)

为什么核心开发者没有把这个 trait 设计成“将字符串连同错误信息一起返回”?

比如为什么不这样设计:

fn read(&mut self) -> Result<String> { ... }

String还包含长度,因此用户可以通过调用 .len() 来访问长度需要的时候。用户可以将它连接到任何其他 String if (s)he wishes,但关键是在调用此函数之前无需创建/拥有一个。

像现在这样设计这个 trait 有什么特别的原因吗?

附注我仍在学习 Rust(通过关注 The Rust Programming Language ),并且在阅读第一版的大部分内容后正在阅读第二版。如果上面的代码有任何错误(尤其是在处理生命周期时),请纠正我。

最佳答案

我不知道真正的原因,但有一些优点:

  • 您可以控制 String 的分配方式。您可以从池中取出它,重新使用它等。
  • 您可以从多个 read_to_string(或类似的)调用中读取同一个字符串。无需连接字符串
  • 结果字符串的大小(在作为参数传递的情况下)不会告诉您读取了多少字节(因为 String 可以是非空的),这就是为什么 usizeResult
  • 中返回

签名

fn read_to_string(&mut self) -> Result<String> { ... }

如果来自高级语言,可能看起来更自然,但它无法控制 String 及其分配。

关于rust - 为什么 Read::read_to_string() 不返回字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com