包保护函数 - public(package)
在之前的课程中,我们已经介绍了Move的基本概念:模块、函数、对象和事件。在这门课程中, 我们将深入探讨Move和对象中更多有用的概念,以便构建一个更加有趣和复杂的Sui Fren世界。
首先让我们讨论函数。在之前的课程中,我们看到了公共函数和私有函数:
- 公共函数可以被交易调用(通过我们稍后会介绍的可编程交易块),也可以被其他Move代码(同一模块或不同模块)调用。
- 私有函数只能在同一模块内部调用。
module 0x123::my_module {
public fun public_equal(x: u64): bool {
x == 1000
}
fun private_equal(x: u64): bool {
x == 1000
}
}
如果你还记得,模块在Sui上部署时被分组为包。这导致了第三种函数可见性 - public(package)
。
public(package)
函数类似于其他语言中的包可见函数,只能被同一包中的模块调用。
这使开发人员能够限制危险函数仅被自己的模块调用,而不被其他模块调用。
module 0x123::my_other_module {
use 0x123::my_module;
public fun do_it(x: u64): bool {
my_module::friend_only_equal(x)
}
}
module 0x123::my_module {
friend 0x123::my_other_module;
public(package) fun friend_only_equal(x: u64): bool {
x == 1000
}
}
要创建一个public(package)
函数,我们只需要使用相应的可见性修饰符 - public(package)
。
在上面的例子中,调用public(package)
函数的任何模块,例如 0x123::my_other_module
。
使public(package)
函数成为包可见函数。