Appearance
函数及其类型
在 Tact 中,函数可以通过不同的方式定义:
- 全局静态函数
- 扩展函数
- 可变函数
- 原生函数
- 接收函数
- 获取器函数
全局静态函数
你可以在程序的任何地方定义全局函数:
solidity
fun pow(a: Int, c: Int): Int {
let res: Int = 1;
repeat(c) {
res *= a;
}
return res;
}
扩展函数
扩展函数允许你为任何可能的类型实现扩展。
警告:第一个参数的名称必须是
self
,且这个参数的类型是你要扩展的类型。
solidity
extends fun pow(self: Int, c: Int) {
let res: Int = 1;
repeat(c) {
res *= self;
}
return res;
}
可变函数
可变函数执行值的变更,用执行结果替换原来的值。要执行变更,函数必须改变 self
值。
solidity
extends mutates fun pow(self: Int, c: Int) {
let res: Int = 1;
repeat(c) {
res *= self;
}
self = res;
}
原生函数
原生函数是直接绑定的 func
函数:
注意:原生函数也可以是可变的和扩展的。
solidity
@name(store_uint)
native storeUint(s: Builder, value: Int, bits: Int): Builder;
@name(load_int)
extends mutates native loadInt(self: Slice, l: Int): Int;
接收函数
接收函数是特殊的函数,负责在合约中接收消息,只能在合约或特性中定义。
solidity
contract Treasure {
// ...
// 这意味着这个合约可以接收“Increment”评论,并且此函数将被调用以处理此类消息
receive("Increment") {
self.counter += 1;
}
}
获取器函数
获取器函数在智能合约上定义获取器,只能在合约或特性中定义。
solidity
contract Treasure {
// ...
get fun counter(): Int {
return self.counter;
}
}