【问题标题】:Rust no_std split_at_mut function "no method named `split_mut_at` found for type" compilation error in rust stableRust no_std split_at_mut 函数“没有找到名为 `split_mut_at` 类型的方法” rust stable 中的编译错误
【发布时间】:2019-01-26 14:32:49
【问题描述】:

我正在尝试从无法编译的嵌入式 rust 示例中提取一些代码。许多这些旧的嵌入式示例无法编译,因为它们每晚都使用,并且很快就会被破坏和忽视。

let mut buffer : [u8; 2048] = [0;2048];
// some code to fill the buffer here
// say we want to split the buffer at position 300
let (request_buffer, response_buffer) = buffer.split_mut_at(300);

此示例使用#![no_std],因此没有可链接的标准库,并且必须在某个时候编译,因此函数 split_mut_at 必须在某个时候起作用。我使用 IntelliJ rust 和 Visual Studio Code 作为 IDE,但两个 IDE 都不能指向 split_mut_at 函数的定义。示例中有一个 crates 和 use 语句的雷区,并且没有明确的方法来确定某些功能在没有大量试错的情况下会出现在哪里。

顺便说一句,split_at_mut 通常可以在std::string::String中找到

是否有 rust 命令可以告诉您项目中某个函数属于哪个 crate?在进行 rust 更新时,更新 rust-docs 总是需要很长时间。肯定会有帮助!

【问题讨论】:

  • 该函数称为split_at_mut,而不是split_mut_at(您可以互换使用这两个名称)。 Rust 附带的库的文档(包括 corestdis also online。浏览文档时,使用搜索栏搜索文档集中所有可用的 crate(查看 crate 的根页面时,您可以在左侧边栏中看到 crate)。请注意,原始类型是特殊的;它们总是记录在std 中,即使这些方法是由core 提供的(切片方法也是如此)。
  • 感谢弗朗西斯指出这一点,错过了!

标签: rust


【解决方案1】:

您正在寻找slice::split_at_mut(请注意末尾的mut)。它列在每晚的文档here 和稳定的文档here 中。它也确实适用于#![no_std]。在libcorehere中定义。

作为一般经验法则,当来自corestd 的函数x 具有可变和不可变变体时,需要不可变引用的函数命名为x,而需要可变引用的函数命名为x_mut.

【讨论】:

  • 感谢 Daniel,现在了解该命名约定非常有用。
猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多