我对"声明"和"定义"的定义与铁 rust 的关系理解不深.Rust引用说明 struct 字段按声明顺序删除.这是否意味着按照 struct 最初创建时的顺序{?定义/声明?},

struct Example {
    x: i32,
    y: i32,
}

或者当值实际添加到struct {?定义/声明?(其可以是与原始创建不同的顺序),

fn foo -> Example {
    Example {
         y: 43,
         x: 42,
    }
} 

我不清楚哪一项是声明,哪一项是定义.

当y丢失时,我试图打印一条消息,但我的代码无法编译.

推荐答案

我不认为这两者对于铁 rust 中的 struct 有什么区别.

在某些语言(like C)中,declaring表示类型存在("存在名为Example的某个类型"),defining表示该类型的 struct ("名为Example的类型具有字段xy")之间可能存在差异.然而,Rust中没有语法将它们分开,它们是同一个.Rust ReferenceRust Book似乎更喜欢称之为"定义",尽管你是对的,documentation on destructors说" struct 体的字段以declaration顺序删除".

"声明的顺序"是您在 struct 的定义中看到的.因此,x将在y之前下降.后一个示例是一个 struct ,如果文档中的意思是这样,那么它将称为"实例化顺序"、"初始化顺序"或类似的东西.


以上这些都不是说在Rust中不存在区别,只是在 struct 方面不存在:

  • 对于特征,特征的definition可以仅包括declarations个关联的功能和其他项,通过特征实现将是defined个.
  • 当谈到引入变量时,您也可以看到"声明"的行话,其中的"定义"可以单独完成(例如,let a; a = 5是有效的),尽管这通常被称为"初始化"而不是"定义",但无论哪种方式,您都会被理解.
  • 最终可能有extern types个涉及类型的"声明"而不是"定义",因为这将用于在Rust之外定义的类型的不透明句柄.

Rust相关问答推荐

为什么单元类型(空元组)实现了`Extend`trait?

什么样的 struct 可以避免使用RefCell?

无法理解铁 rust &S错误处理

在Rust中宏的表达式中提取对象

在自定义序列化程序中复制serde(With)的行为

使用铁 rust S还原对多个数组执行顺序kronecker积

如何模拟/创建ReqData以测试Actix Web请求处理程序?

Gtk4-rs:将监视器作为gdk::monitor获取,而不是作为glib::对象获取

告诉Rust编译器返回值不包含构造函数中提供的引用

为什么';t std::cell::ref使用引用而不是非空?

为什么Deref类特征不构成?

实现 Deref 的 struct 可以返回对外部数据的引用吗?

我可以用 Rust 编写一个不可变变量

为什么我们有两种方法来包含 serde_derive?

如何限制通用 const 参数中允许的值?

如何使用泛型满足 tokio 异步任务中的生命周期界限

类型判断模式匹配panic

改变不实现克隆的 dioxus UseState struct

使用 HashMap 条目时如何避免字符串键的短暂克隆?

如何将 u8 切片复制到 u32 切片中?