Commonly Used Library Types

Icon Link常用的库类型

Sway 标准库是可移植 Sway 软件的基础,是广泛的 Sway 生态系统的一组最小共享抽象。它提供了核心类型、对语言原语的库定义操作、原生资产管理、区块链上下文操作、访问控制、存储管理以及对其他 VM 类型的支持,等等。可以在这里 Icon Link查看标准库文档。

Icon LinkResult<T, E>

Result类型用于返回和传播错误。它是一个enum,有两个变体:Ok(T),表示成功并包含一个值,和Err(E),表示错误并包含一个错误值。在这个定义中的TE是类型参数,允许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")),
    }
}
 

Icon LinkOption<T>

Option类型表示可选值:每个Option要么是Some并包含一个值,要么是None,不包含值。在 Sway 代码中,Option类型非常常见,因为它们具有多种用途:

  • 初始值可以使用None作为初始化器。
  • 作为简单错误的返回值,在错误时返回None

Option的实现基于变体进行匹配:如果是Ok,它将返回内部值;如果是None,它会回滚 Icon Link

/// 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"),
    }
}