Sway 标准库是可移植 Sway 软件的基础,是广泛的 Sway 生态系统的一组最小共享抽象。它提供了核心类型、对语言原语的库定义操作、原生资产管理、区块链上下文操作、访问控制、存储管理以及对其他 VM 类型的支持,等等。可以在这里 查看标准库文档。
Result<T, E>
Result
类型用于返回和传播错误。它是一个enum
,有两个变体:Ok(T)
,表示成功并包含一个值,和Err(E)
,表示错误并包含一个错误值。在这个定义中的T
和E
是类型参数,允许Result
是泛型的,并且可以与任何类型一起使用。
/// `Result` is a type that represents either success (`Ok`) or failure (`Err`).
pub enum Result<T, E> {
/// Contains the success value.
Ok: T,
/// Contains the error value.
Err: E,
}
每当预期并且可恢复的错误时,函数都会返回Result
。
考虑以下示例:
script;
enum MyContractError {
DivisionByZero: (),
}
fn divide(numerator: u64, denominator: u64) -> Result<u64, MyContractError> {
if (denominator == 0) {
return Err(MyContractError::DivisionByZero);
} else {
Ok(numerator / denominator)
}
}
fn main() -> Result<u64, str[4]> {
let result = divide(20, 2);
match result {
Ok(value) => Ok(value),
Err(MyContractError::DivisionByZero) => Err(__to_str_array("Fail")),
}
}
Option<T>
Option
类型表示可选值:每个Option
要么是Some
并包含一个值,要么是None
,不包含值。在 Sway 代码中,Option
类型非常常见,因为它们具有多种用途:
None
作为初始化器。 None
。 Option
的实现基于变体进行匹配:如果是Ok
,它将返回内部值;如果是None
,它会回滚 。
/// A type that represents an optional value, either `Some(val)` or `None`.
pub enum Option<T> {
/// No value.
None: (),
/// Some value of type `T`.
Some: T,
}
Option
通常与模式匹配配对,以查询值的存在并采取行动,使开发人员能够选择如何处理None
情况。
下面是一个示例,使用模式匹配来处理除以 0 的无效除法,并返回一个Option
:
script;
fn divide(numerator: u64, denominator: u64) -> Option<u64> {
if denominator == 0 {
None
} else {
Some(numerator / denominator)
}
}
fn main() {
let result = divide(6, 2);
// Pattern match to retrieve the value
match result {
// The division was valid
Some(x) => std::logging::log(x),
// The division was invalid
None => std::logging::log("Cannot divide by 0"),
}
}