函数

在这一节,我们会介绍 Sui Move 的函数,并且写下我们的第一个 Sui Move 函数,作为 Hello World 项目示例的一部分。

函数可见性

Sui Move 函数有三种可见性:

  • private: 作为函数可见性的默认设置;只允许同一 module 内的函数获取
  • public: 该函数既可以被同一 module 内的函数获取,也可以被其他 module 定义的函数获取
  • public(friend): 该函数既可以被同一 module 内的函数获取,同时也可以被该 module 的 friends 清单上包含的 module 所定义的函数获取。

返回值

函数的返回类型在函数签名中的函数参数之后用冒号分隔指定。

函数的最后一行(执行时)没有分号即为返回值。

示例:

#![allow(unused)]
fn main() {
    public fun addition (a: u8, b: u8): u8 {
        a + b    
    }
}

交易上下文 (Transaction Context)

通过交易直接调用的函数通常将 TxContext 实例作为最后一个参数。这是由 Sui Move VM 设置的特殊参数,不需要由调用函数的用户指定。

TxContext 对象包含关于调用 entry 函数的交易的基本信息,如发送者地址、签名者地址、交易的 epoch 等。

创建 mint 函数

我们可以用如下方式定义 Hello World 示例项目中的 mint 函数:

    public entry fun mint(ctx: &mut TxContext) {
        let object = HelloWorldObject {
            id: object::new(ctx),
            text: string::utf8(b"Hello World!")
        };
        transfer::transfer(object, tx_context::sender(ctx));
    }

这个函数创建了 HelloWoirldObject 定制类型的一个新实例,然后使用 Sui 系统中的转移函数 transfer 将其发送给交易的调用者。

字符编码:ASCII,Unicode 和 UTF-8