Skip to content

函数及其类型

在 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;
  }
}