- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
昨天关门了。
Improve this question
它看起来像是关于绑定一个类型构造函数到一个变量,但是我没有看到在一个野生的和编译器接受它像它是正常的。这就是为什么我问。
先谢了!
link to playgroud
#[derive(Debug)]
struct B(u8);
#[derive(Debug)]
enum E {
A(u8),
}
fn main() {
let y = E::A;
let y = y(0);
dbg!(y);
let x = B;
let x = x(0);
dbg!(x);
// uncomment to see compiler complain
// let c: fn(u8) -> u8 = B;
}
- UPD:**刚刚回忆起让我好奇的东西。这是来自Rust 1.66.0 Announce的代码块,我也觉得很混乱。
#[repr(u8)]
enum Foo {
A(u8),
B(i8),
C(bool) = 42,
}
2条答案
按热度按时间2ul0zpep1#
对于元组结构体和枚举变量,为了方便起见,编译器会定义一个与结构体/变量同名的函数,这样可以很容易地将集合 Package 在结构体/变量中,如下所示:
它也可能是为了避免混淆,在这种情况下,某些标识符可以省略括号,而其他标识符则不能。
kt06eoxx2#
它们之所以这样是因为编译器就是这样设计的。
类似元组的结构体和类似元组的枚举变体都可以用作其各自功能项类型的零大小值。
而这些又可以被强制为函数指针,这就是当你赋值
fn(_) -> _
类型时c
被声明的内容。记录如下:The Rust Reference - Function item types .