Icon Link选项

Sway 提供了 Option(可选)容器来处理可能具有值或标记为“无值”的变量。在处理变量可能有定义值或可能没有定义值的情况时,这个概念非常有用。

在本指南中,我们将解释如何在 Sway 中使用 Option 类型,并通过一个实际的例子来演示它们的用法。

Icon LinkOption 类型概述

在 Sway 中,Option 类型是一种特殊的枚举类型的包装器。在 TypeScript 中,您可以使用 undefined 关键字表示 Option 类型,如下例所示:

// Sway Option<u8>
const input1: number | undefined = 10;

在这个例子中,变量 input1 可以是一个 numberundefined

Icon Link示例:Option<u8> 参数

假设我们有一个合约函数接受两个 Option<u8> 参数。这两个参数都可以有值,也可以是未定义的。该函数检查每个输入是否有值;如果没有,它会将值设为 0。最后,函数返回两个输入的和。

下面是用 Sway 编写的合约函数:

fn sum_optional_u8(input1: Option<u8>, input2: Option<u8>) -> u8 {
    let value1 = match input1 {
        Option::Some(v) => v,
        Option::None => 0,
    };
 
    let value2 = match input2 {
        Option::Some(v) => v,
        Option::None => 0,
    };
 
    value1 + value2
}

您可以使用 SDK 与合约函数交互,如下所示:

const input1: number | undefined = 10;
 
const input2: number | undefined = 5;
 
const { value } = await contract.functions.sum_optional_u8(input1, input2).simulate();
 
expect(value).toEqual(input1 + input2);

在这种情况下,合约函数调用的结果是两个输入参数的总和。如果我们只传递一个参数,合约函数将默认另一个参数的值为 0

const input: number | undefined = 5;
 
const { value } = await contract.functions.sum_optional_u8(input).simulate();
 
expect(value).toEqual(input);

在 Sway 中使用 Option 类型可以优雅地处理变量可能具有或可能没有定义值的情况。