为什么可以将带连字符的 crate 名称更改为带下划线的名称,在这种模棱两可的情况下命名规则是什么?

Xol*_*lve 4 rust rust-cargo

我创建了一个新的 Cargo 项目:cargo new --lib hyphen-crate.

源代码/库.rs

pub fn add(a: u32, b: u32) -> u32 {
    a + b
}
Run Code Online (Sandbox Code Playgroud)

测试/添加.rs

use hyphen_crate::add;

#[test]
fn addition_test() {
    assert_eq!(5, add(2, 3));
}
Run Code Online (Sandbox Code Playgroud)

Cargo.toml

[package]
name = "hyphen-crate"
version = "0.1.0"
authors = ["xolve"]
edition = "2018"

[dependencies]
Run Code Online (Sandbox Code Playgroud)

我搜索并看到了许多讨论,是否应该在板条箱或包的名称中允许使用连字符,但没有链接提到解决方案。

我看到的是,板条箱名称hyphen-crate会自动转换为hyphen_crate并成功编译和测试。

Her*_*tar 7

包名中允许使用连字符,但它们在内部被转换为下划线,因为连字符在Rust 标识符中不是有效字符。

似乎这种自动转换并非总是如此,带连字符的 crate 必须手动重命名才能导入它们;例如。extern crate "hyphen-crate" as hyphen_crate;. 有关这方面的一些详细信息,请参阅认为有害连字符 RFC