Rust的枚举是代数数据类型。据我所知,这似乎包含了struct是什么。struct有什么不同之处需要保留它?
不是100%正确,但是另一种很好的思考方式:enum
实际上并不优于struct
,语法糖只是让它看起来像是这样。
enum
是一种求和类型,意味着它的值是一组其他类型之一的值。结果
enum Animal {
// without syntax sugar
Cat(i32),
// desugars to `Dog(())` (empty tuple/unit)
Dog,
// desugars to `Horse((i32, bool))` (tuple)
Horse(i32, bool),
// desugars to `Eagle(GeneratedEagleType)` and a struct definition outside
// of this enum `struct GeneratedEagleType { weight: i32, male: bool }`
Eagle { weight: i32, male: bool }
}
因此,如果每个
enum
变量只与一种类型关联就足够了。在这种情况下,enum
并不优于struct
,因为它不能构造产品类型(如struct
)。
能够在枚举变量定义中写入“类型定义”只是为了方便。
另外:
struct
也优于“tuple-structs”和“tuple”。如果我们忽略这三个名字,这三件事几乎是等价的。但为了方便起见,Rust仍然有这三种不同的类型。
请注意,我不知道这些枚举定义是否实际上是语法糖。但他们可能是,这可能有助于思考。它
首先,Rust具有广泛的数据类型:
struct Foo{bar:uint}
)structfoo(pub-Bar,Baz)
)struct Foo;
)None
)Some(T)
)一些{pub-inner:T}
)这为程序员定义数据类型提供了一些灵活性。通常,您不需要命名字段,尤其是当结构/变量只有一个字段时。Rust允许您在这种情况下使用元组结构/元组变体。
如果将结构从锈迹中移除,则不会丢失功能,可以再次使用带有结构变体的枚举。但是会有大量的单变量枚举,使用起来既不必要又麻烦。
首先,你是正确的,在语义上enum
在表示什么方面严格优于struct
,因此struct
有些冗余。
然而,这里还有其他因素在起作用。
>
区别:一个enum
是一个带标签的联合体,一个struct
有一个固定的布局;我们(程序员)通常喜欢在东西上贴标签,因此给不同的功能赋予不同的名称是值得赞赏的。
在我看来,struct
因此是语法糖。我通常更喜欢瘦肉型的,但一点糖可以大大增加简洁的表达。
问题内容: 给定以下结构: 在结构中使用指针或值时,性能方面有何不同?是否有开销,或者这仅仅是两门Go编程课程? 我将使用指针来实现链接的结构,但这是我们唯一必须在结构中使用指针以获得性能的情况吗? PS:在上面的结构中,我们讨论了一个简单的int,但是它可以是任何其他类型(甚至是自定义类型) 问题答案: 使用对您的程序功能最有用的表格。基本上,这意味着如果将值设为有用,则使用指针。 从性能的角度
本文向大家介绍iOS 类(class)和结构体(struct)有什么区别?相关面试题,主要包含被问及iOS 类(class)和结构体(struct)有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 先了解一下什么叫类? 类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类是面向对象程序设
问题内容: 切片是对基础数组的引用。这是有道理的,似乎可以在内置/原始类型上使用,但是为什么不能在结构上使用呢?我假设即使我更新了一个struct字段,引用/地址也仍然相同。 需要说明的是:我知道我可以在两种情况下都使用指针。我只是对为什么不更新结构感兴趣(与int不同)。 问题答案: 调用时要做的是传递一个包含值副本的新数组,并立即丢弃该数组。这与您使用基元不同,因为您保留了数组。 这里有两种方
如果我在Rust中运行这些基准测试: 结果是: 每次通话121-6=115纳秒。 但Java的基准相同: 给我: Rust中的原木速度约为Java中的3.7倍(115/31)。 当我测试斜边实现()时,Rust中的实现速度是Java中的15.8倍。 我是否编写了糟糕的基准测试,或者这是一个性能问题? 回复评论中提出的问题: > 我使用总是在发布模式下运行的运行Rust的基准测试。 Java基准测试
虽然Rust中的所有整数类型都实现了强调总排序的,但浮点类型只实现了。这意味着可能存在无法比较的浮点值。这似乎很难理解,因为浮点数可以被认为是实数的近似值,实数碰巧是一个完全有序的集合。即使加上正无穷大和负无穷大,也会使实数集保持完全有序。为什么在铁锈这个奇怪的选择? 这种限制意味着通用排序/搜索算法只能假设数字的部分排序。IEEE 754标准似乎提供了一个总排序谓词。 NaN在通用代码中是个大问