菜单

核心类型

相关源文件

本页面介绍了 Sway 标准库提供的核心数据类型。这些类型构成了 Sway 应用程序和合约中数据操作和管理的基础。有关用于区块链状态持久化的存储类型信息,请参阅 集合和存储

核心类型概述

Sway 编程语言包括内置基本类型和标准库中实现的复合类型。这些类型为在 Fuel 平台上创建健壮高效的程序提供了基本构建块。

来源: sway-lib-std/src/u128.sw sway-lib-std/src/bytes.sw sway-lib-std/src/vec.sw sway-lib-std/src/option.sw sway-lib-std/src/result.sw sway-lib-std/src/string.sw sway-lib-std/src/prelude.sw

Option 和 Result 类型

选项

Option<T> 类型表示一个可选值——它要么是包含 T 类型值的 Some(T),要么是表示缺少值的 None。此类型在 Sway 代码中常用于处理可空值,而无需引入 null 的概念。

关键方法

  • is_some() - 如果选项是 Some 变体,则返回 true
  • is_none() - 如果选项是 None 变体,则返回 true
  • unwrap() - 返回包含的值,如果为 None 则回滚
  • unwrap_or(default) - 返回包含的值或提供的默认值
  • expect(msg) - 类似于 unwrap,但带有自定义错误消息
  • ok_or(err) - 将 Option<T> 转换为 Result<T, E>

使用示例

来源: sway-lib-std/src/option.sw84-90 sway-lib-std/src/option.sw132-137 sway-lib-std/src/option.sw156-161 sway-lib-std/src/option.sw196-201

Result<T, E>

Result<T, E> 类型表示成功(Ok(T))或失败(Err(E))。成功时包含 T 类型的值,失败时包含 E 类型的错误。此类型在 Sway 代码中用于错误处理,尤其是在与区块链交互时。

关键方法

  • is_ok() - 如果结果是 Ok 变体,则返回 true
  • is_err() - 如果结果是 Err 变体,则返回 true
  • unwrap() - 返回包含的 Ok 值,如果为 Err 则回滚
  • unwrap_or(default) - 返回包含的 Ok 值或提供的默认值
  • expect(msg) - 类似于 unwrap,但带有自定义错误消息

使用示例

来源: sway-lib-std/src/result.sw65-70 sway-lib-std/src/result.sw101-106 sway-lib-std/src/result.sw130-135 sway-lib-std/src/result.sw169-174 sway-lib-std/src/result.sw202-207

数字类型

U128

U128 类型提供了 128 位无符号整数的实现,内部表示为两个 64 位组件:(upper, lower),其中值等于 (upper << 64) + lower

主要功能

  • 完整支持算术运算(+、-、*、/、%)
  • 位运算(AND、OR、XOR、移位)
  • 比较运算符
  • 数学函数(幂、平方根、对数)
  • 与其他数字类型的相互转换

使用示例

来源: sway-lib-std/src/u128.sw20-30 sway-lib-std/src/u128.sw290-295 sway-lib-std/src/u128.sw325-330 sway-lib-std/src/u128.sw581-608 sway-lib-std/src/u128.sw634-654

集合类型

Vec

Vec<T> 类型是一个通用的、堆分配的向量,可以在运行时增长或收缩。它提供了一个动态长度的 T 类型值的连续数组。

主要功能

  • 需要时自动进行内存管理,容量加倍
  • 带边界检查的元素访问
  • 添加、删除和修改元素的方法
  • 元素迭代
  • 与原始内存的相互转换

使用示例

来源: sway-lib-std/src/vec.sw147-151 sway-lib-std/src/vec.sw175-180 sway-lib-std/src/vec.sw215-220 sway-lib-std/src/vec.sw240-255 sway-lib-std/src/vec.sw325-337

Bytes

Bytes 类型是一个专门用于处理原始字节(u8 值)的集合。它在处理二进制数据、加密操作或低级内存操作时特别有用。

Vec<T> 类似,但专门用于 u8 值,Bytes 提供了用于以下操作的方法:

  • 创建和管理字节集合
  • 访问和修改单个字节
  • 分割和组合字节集合
  • 字节与其他类型之间的转换

使用示例

来源: sway-lib-std/src/bytes.sw91-96 sway-lib-std/src/bytes.sw120-125 sway-lib-std/src/bytes.sw158-163 sway-lib-std/src/bytes.sw185-200 sway-lib-std/src/bytes.sw352-379

字符串

String 类型表示一个 UTF-8 编码、可增长的字符串。它建立在 Bytes 类型之上,并提供字符串特有的功能。

主要功能

  • 从 ASCII 字节或字符串字面量创建字符串
  • 与原始字节的相互转换
  • 标准的内存管理和容量操作

使用示例

重要提示:如实现注释中所述,String 类型被设计为与 UTF-8 向前兼容,但在适当的 Unicode 支持实现之前,其变异功能目前受到限制。

来源: sway-lib-std/src/string.sw14-24 sway-lib-std/src/string.sw46-48 sway-lib-std/src/string.sw119-123 sway-lib-std/src/string.sw143-151 sway-lib-std/src/string.sw191-194

实用程序类型和错误处理

Sway 标准库提供了处理错误和断言的一致机制

断言和回滚

Sway 提供了几种处理错误和断言条件的方法

  1. 断言 - 用于检查应始终为 true 的条件

    • assert(condition) - 如果条件为 false,则回滚
    • assert_eq(v1, v2) - 如果值不相等,则回滚
    • assert_ne(v1, v2) - 如果值相等,则回滚
  2. 回滚函数 - 用于显式错误处理

    • require(condition, value) - 检查条件,记录值,如果为 false 则回滚
    • revert(code) - 无条件地带代码回滚
    • revert_with_log(value) - 记录一个值并回滚

这些函数使用预定义的错误信号,以在整个平台中提供一致的错误报告。

使用示例

来源: sway-lib-std/src/assert.sw35-39 sway-lib-std/src/assert.sw62-71 sway-lib-std/src/revert.sw34-36 sway-lib-std/src/revert.sw58-64 sway-lib-std/src/error_signals.sw1-45

类型转换

Sway 的标准库实现了类型转换的一致模式

From/Into

From<T>Into<T> 特性提供了类型之间不可失败的转换

TryFrom/TryInto

TryFrom<T>TryInto<T> 特性提供了可能失败的可失败转换

许多核心类型实现了这些转换特性,以确保在整个标准库中的无缝互操作性。

来源: sway-lib-std/src/u128.sw32-54 sway-lib-std/src/u128.sw938-976 sway-lib-std/src/bytes.sw996-1032

结论

Sway 标准库中的核心类型为在 Fuel 平台上构建应用程序和合约提供了坚实的基础。

通过理解这些基本类型及其操作,开发人员可以编写更高效、更可靠的代码。