Rust 为什么可以将连字符板条箱名称更改为带下划线的名称?在这种不明确的情况下,命名规则是什么?

Rust 为什么可以将连字符板条箱名称更改为带下划线的名称?在这种不明确的情况下,命名规则是什么?,rust,rust-cargo,Rust,Rust Cargo,我创建了一个新的Cargo项目:Cargo new--lib hyphen cratet src/lib.rs pub fn add(a: u32, b: u32) -> u32 { a + b } use hyphen_crate::add; #[test] fn addition_test() { assert_eq!(5, add(2, 3)); } 测试/添加.rs pub fn add(a: u32, b: u32) -> u32 { a +

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

src/lib.rs

pub fn add(a: u32, b: u32) -> u32 {
    a + b
}
use hyphen_crate::add;

#[test]
fn addition_test() {
    assert_eq!(5, add(2, 3));
}
测试/添加.rs

pub fn add(a: u32, b: u32) -> u32 {
    a + b
}
use hyphen_crate::add;

#[test]
fn addition_test() {
    assert_eq!(5, add(2, 3));
}
Cargo.toml

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

[dependencies]
我已经搜索并看到了很多关于是否应该在板条箱或包装的名称中使用连字符的讨论,但没有链接提到解决方案


我看到的是,板条箱名称
连字符板条箱
自动转换为
连字符板条箱
,并且它编译和测试成功。

在包名中允许连字符,但它们在内部转换为下划线,因为连字符在中无效


似乎这种自动转换并不总是如此,带有连字符的板条箱必须手动重命名才能导入;例如,
外部板条箱“连字符板条箱”作为连字符板条箱。有关这方面的详细信息,请参阅。

为什么可能?连字符在包名中是允许的,但它们在内部被转换为下划线,因为连字符在中不是有效字符。@Herohtar将其放在一个答案中并链接到一个源中,您就得到了一张赞成票。在我看来,这是OP真正需要的唯一信息。帮助每一个生锈的初学者,不要在板条箱名称中使用连字符:pI知道标识符不能包含连字符。这里的规则非常明确:[.RFC940这是有问题的链接和其他语言参考页面:确实提到了这个规则。谢谢!