Rust—数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust—数据类型相关的知识,希望对你有一定的参考价值。
参考技术ARust 是静态类型语言,在编译时必须知道所有变量的类型,根据值及其使用方式,编译器通常可以推断出我们想要的类型。当多种类型均有可能时,必须增加类型注解。
数据类型分两类: 标量 , 复合
Rust有四种基本标量类型: 整型 , 浮点型 , 布尔类型 , 字符类型
整型 : u8 , i8 , u16 , i16 , u32 , i32 , u64 , i64 , i128 , u128 , 字母u表示是无符号,i表示是有符号,数字表示占用的位数。
Rust默认整数是 i32 它通常是最快的,即使是在64位系统上也是如此
浮点型 : f32 , f64 , 分别占 32 位和 64 位,默认类型是 f64 ,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。
布尔类型(bool): Rust 中的布尔类型有两个可能的值: true 和 false
字符类型(char) :Rust总字符类型( Char )占用 四个字节 ,代表了一个 Unicode 标量值,在 Rust 中,拼音字母(Accented letters),中文、日文、韩文等字符,emoji(绘文字)以及零长度的空白字符都是有效的 char 值。
复合类型 可以将多个值组成一个类型, Rust 有两个原生的复合类型, 元组((tuple) 和 数组(array)
元组 :是一个将多个其他类型的值组合进一个复合类型的主要方式。
解构方式一
解构方式二
函数返回元组
与元组不同,数组中的每个元素的类型必须相同,一旦声明,他的长度将不能增长或者缩小。
Rust 中,数组中的值位于中括号内的逗号分隔的列表中:
注意 :Rust数组的定义形式和其他的语言有着明显的不同;
如何检查对象是不是是 Rust 中的原始数据类型?
【中文标题】如何检查对象是不是是 Rust 中的原始数据类型?【英文标题】:How to check if an object is a primitive data type in Rust?如何检查对象是否是 Rust 中的原始数据类型? 【发布时间】:2021-11-06 04:55:06 【问题描述】:我是一名正在向 Rust 过渡的 C++ 开发人员,我正在寻找类似于
bool isPrimitive = std::is_fundamental<varType>
。我没有太多运气找到一个标准的方法来做到这一点。我想我可以手动滚动我自己的函数,该函数对所有 Rust 原始类型执行一堆 OR。但我希望那里已经有一些东西了。
示例
let is_primitive = someFunction<i32> //returns true
let is_primitive_1 = someFunction<Vec<u32>> //returns false
let is_primitive_2 = someFunction<someStruct> //returns false
let is_primitive_3 = someFunction<(bool, f32)> //returns false
【问题讨论】:
你为什么需要这个? 我认为(我最好的猜测)你在这里尝试的是有一个只接受“基础”的参数函数?这不是它在 Rust 中的工作方式。您必须描述该类型T
能够做什么,例如添加数字或在其上调用foo
,通过使用约束,例如T: Foo
其中Foo
是一个特征。你可以看看doc.rust-lang.org/rust-by-example/generics.html
“原始性”不是一个明确定义的质量。一个类型是“原始的”或“基本的”对你来说究竟意味着什么? Rust 本身没有这样的概念。
即便如此,您能否详细说明为什么您需要检查某事物是否符合原始性的特定定义?对于您在此处尝试解决的更高级别问题,很可能有一个优雅、惯用的解决方案。
例如,来自 C++ 的人可能认为他们需要检查原始性,以便他们可以安全地(即没有奇怪的别名效应和没有高内存成本)复制该类型的值。在 Rust 中,尽管您只需使用 Copy
特征,所有原始类型都实现了它。
【参考方案1】:
你写
我需要他们能够判断数据类型何时是原始的,或者所描述的类型是否有其他字段,他们需要从二进制文件中提取出来。
这个属性将由二进制文件的格式设计决定,而不是由 Rust 自己的内置类型决定。因此,您应该安排能够向数据序列化器询问有关其编码的问题,而不是询问 Rust。
【讨论】:
以上是关于Rust—数据类型的主要内容,如果未能解决你的问题,请参考以下文章