函数可见性

我们在前面的课程中已经见过一些使用函数的示例。本节中我们将进一步讨论函数。

一个函数使用 fun 关键字声明,后跟函数名、类型参数、输入参数、返回类型和函数体。

fun my_function<A_Type>(input1: u64, input2: A_Type): (A_Type, bool) {
    input2.x = input2.x + input1;
    (input2, true)
}

函数可以具有不同的可见性:privatepublicpublic(package)

1. private

如果我们没有明确指定,private 是函数的默认可见性。private 函数只能在声明它的模块内部访问。

module move_castle::module_a {
    fun foo(): u64 { 0 }
}

module move_castle::module_b {
    use move_castle::module_a;
    fun call_foo() {
        module_a::foo(); // error[E04001]: restricted visibility
    }
}

2. public

public 函数可以被任何模块中的任何函数调用,如果我们将函数 foo 改为 public,则允许在 call_foo 中调用它。

module move_castle::module_a {
    public fun foo(): u64 { 0 }
}

module move_castle::module_b {
    use move_castle::module_a;
    fun call_foo() {
        module_a::foo(); // 可行
    }
}

3. public(package)

public(package) 修改后的函数只允许在定义它们的同一个包内调用。