rust 是强类型语言,所有变量、常量都必须有明确的数据类型;很多情况下,省略类型声明,编译器可自动推导,但不是所有情况下都会成功。

rust 有整型、浮点型、布尔型、字符型、数组、元组、枚举、结构体等数据结构,其中:

  • 整型有:i8、i16、i32、i64、isize、u8、u16、u32、u64、usize 等

    • 其中 isize 在不同硬件架构上编译的结果不同,如在 x86-64 上为 i64,在x86-32 上则为 i32
    • 所有硬件平台的自动推导默认类型均为 i32
    • 字面值之间可以添加任意数量的 '_' 提高可读性,如:123_456_789 与 123456789 等价
    • 0xff、0o77、0b11_00 分别是十六进制、八进制、二进制表示法,另 b'A' 表示单字节字符 'A',仅支持 u8 类型
  • 浮点型有:f32、f64,自动推导默认类型 f64

  

一、rust 中的变量值默认是不允许改变的,即不可二次斌值,如下代码无法通过编译,需要在变量前添加 mut 标识

fn main() {
let zVar: i64 = 0; // let mut zVar: i64 = 0;
zVar = 1;
println!("{}", zVar);
}

二、rust 中可以连续定义同名变量,新的变量将覆盖旧的变量,且前后的变量类型可以不一致:即 shadowing 特性。

fn main() {
    let zvar: i32 = 0;
    let zvar: i32 = zvar + 1;
    let zvar: i32 = zvar * 2;
    let zvar: &str = "Hello World!";
    let zvar = zvar.len();     println!("{}", zvar);
}

三、rust 中常量定义必须显示指明数据类型,同一作用域内不可重名,局部定义覆盖全局定义。

const GLOB_NUM: f64 = 0.0;    // 右值必须符合左值声明的数据类型,如指定 f64,但右值赋值为 1,则无法通过编译。

fn main() {
let zvar: i32 = 0;
let zvar: i32 = zvar + 1;
let zvar: i32 = zvar * 2;
let zvar: &str = "Hello World!";
let zvar = zvar.len(); const GLOB_NUM: f64 = 1.0; println!("{} {}", zvar, GLOB_NUM);
}

四、结构体

fn main() {
#[derive(Debug)]
struct _T {
a: i32,
b: u64,
} let mut _test = _T {a: , b: }; // 必须斌值,否则后续无法使用 _test.a = ;
_test.b = ; println!("{} {}\n{:?}", _test.a, _test.b, _test);
}

注:

  • 结构体类型定义末尾不加分号 ';'
  • 结构体实例定义所有成员变量必须全部初始化
  • #[derive(Debug)] 用于启用调试打印格式
  • 允许在函数体内定义局部结构体

五、枚举

#[derive(Debug)]
enum _T {
_A(i32),
_B(String),
_C(i64, u32),
_D,
_E{x: i32, y: i32},
} impl _T {
fn print_self(&self) -> i32 {
println!("{:?}", self); }
} fn main() {
let _var = _T::_D;
let _var0 = _T::_E{x: , y:}; _var.print_self();
_var0.print_self();
}
  • rust 的枚举成员可以进一步梆定任意类型数据结构
  • 所有成员属于同一数据类型,方法共享

____

最新文章

  1. 我心中的MySQL DBA
  2. newsstand杂志阅读应用源码ipad版
  3. COUNT(*),count(1),COUNT(ALL expression),COUNT(DISTINCT expression)
  4. SSL/TLS/WTLS原理
  5. hadoop日志分析
  6. 小强HTML5手机发展之路(52)——jquerymobile触摸互动
  7. git安装后配置--config
  8. hibernate的对象状态分析
  9. Unity 大中华区核心业务
  10. 3.13 练习题4:邮件发送(smtp)
  11. shell 命令使用笔记
  12. HDFS-put: unexpected URISyntaxException
  13. Java微信二次开发(七)
  14. docker 安装MySQL远程连接
  15. L1正则化和L2正则化
  16. python中的property
  17. ZOJ 80ers' Memory
  18. Java spring mvc多数据源配置
  19. 己动手创建最精简的Linux
  20. BuilderPattern(23种设计模式之一)

热门文章

  1. python2.7.13标准库文件目录操作与文件操作
  2. 记录规则(recording rules)与告警规则(alerting rule)
  3. LeetCode刷题: 【120】三角形最小路径和
  4. while语句基本练习(求和思想,统计思想)
  5. PdgCntEditor系列教程一:基础知识
  6. Liunx平台安装MySQL操作步骤
  7. 【记录】iconfont 批量把图标加入购物车的方法
  8. 2018-2-13-win10-UWP-应用设置
  9. shell位置参数处理举例
  10. web storage 简单的网页留言版