跳到主要内容

数据类型

整型

支持 6 种无符号整型,分别是 u8u16u32u64u128u256。取值范围见下表

类型范围
u80 ~ 282^8 - 1
u160 ~ 2322^{32} - 1
u320 ~ 2322^{32} - 1
u640 ~ 2642^{64} - 1
u1280 ~ 21282^{128} - 1
u2560 ~ 22562^{256} - 1

示例

// 前置类型声明
let int_a: u8 = 1;

// 后置类型声明
let int_b = 1u8;

// 前置类型声明 + 16进制赋值
let hex_int: u8 = 0x1;

布尔

bool, 表示值 truefalse

let b1 = true; // 自动类型推导
let b2: bool = true;

地址

地址类型 address, 值的长度为 128 位(16 字节)的整数。使用 @ 符号定义

let a1: address = @0x1; // 等价于 0x00000000000000000000000000000001
let a2: address = @0x42; // 等价于 0x00000000000000000000000000000042
let a3: address = @0xDEADBEEF; // 等价于 0x000000000000000000000000DEADBEEF
let a4: address = @0x0000000000000000000000000000000A;

Vector

集合类型,使用 vector<T> 声明类型。集合中的元素类型取决于泛型 T。存在下列方法

  • vector::empty<T>(): vector<T> 创建空的集合
  • vector::singleton<T>(t: T): vector<T> 创建长度为 1 的集合, 包含元素 t
  • vector::push_back<T>(v: &mut vector<T>, t: T) 向集合 v 末尾添加元素 t
  • vector::pop_back<T>(v: &mut vector<T>): T 删除集合 v 末尾元素
  • vector::borrow<T>(v: &vector<T>, i: u64): &T 从集合 v 返回索引为 i 的元素的不可变引用
  • vector::borrow_mut<T>(v: &mut vector<T>, i: u64): &mut T 从集合 v 返回索引为 i 的元素的可变引用
  • vector::destroy_empty<T>(v: vector<T>) 删除集合 v
  • vector::append<T>(v1: &mut vector<T>, v2: vector<T>) 将集合 v2 中元素依次添加到集合 v1
  • vector::contains<T>(v: &vector<T>, e: &T): bool 如果集合 v 包含元素 e 则返回 true
  • vector::swap<T>(v: &mut vector<T>, i: u64, j: u64) 交换集合 v 中索引为 ij 个处的元素
  • vector::reverse<T>(v: &mut vector<T>) 反转集合 v 中的元素
  • vector::index_of<T>(v: &vector<T>, e: &T): (bool, u64) 如果在集合 v 中的索引为 i 处找到 e,则返回(true, i), 否则,返回(false, 0)
  • vector::remove<T>(v: &mut vector<T>, i: u64): T 删除集合 v 中索引为 i 的元素
  • vector::swap_remove<T>(v: &mut vector<T>, i: u64): T 交换集合 v 中索引为 i 和最后一个元素,并删除该元素。

集合可调用的方法取决于内部元素的能力。

use std::vector;

let v = vector::empty<u64>(); // 创建空集合, 集合中元素类型为 u64
vector::push_back(&mut v, 5); // 向集合中添加元素 5
vector::push_back(&mut v, 6); // 向集合中添加元素 6

assert!(*vector::borrow(&v, 0) == 5, 42);
assert!(*vector::borrow(&v, 1) == 6, 42);
assert!(vector::pop_back(&mut v) == 6, 42);
assert!(vector::pop_back(&mut v) == 5, 42);