函数
在这一节,我们会介绍 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 将其发送给交易的调用者。