接收消息
TON 是一个分布式区块链,这意味着合约之间的通信是通过发送和接收信息完成的。 最常见的消息类型是内部消息――从一个合约(或一个钱包)发给另一个合约。
接收内部消息
要接收所需类型的消息,您需要声明一个接收函数,例如receive("increment")
。 此符号表示接收器函数的声明,当具有值 "increment"
的文本被发送到合约时,将调用该函数。 函数体可以修改合约的状态,并向其他合约发送消息。 不可能直接调用receiver
。 如果需要重用某些逻辑,可以声明一个函数,然后从receiver
中调用。
有多个接收函数。 所有接收函数的处理顺序如下:
receive()
- 向合约发送空消息时调用。receive("message")
- 向合约发送带有特定注释的文本消息时调用。receive(str: String)
- 向合约发送任意文本消息时调用。receive(msg: MyMessage)
-当向合约发送MyMessage
类型的二进制消息时调用。receive(msg: Slice)
- 向合约发送未知类型的二进制消息时调用。
message MyMessage { value: Int;}
contract MyContract { receive() { // ... } receive("message") { // ... } receive(str: String) { // ... } receive(msg: MyMessage) { // ... } receive(msg: Slice) { // ... }}
用下划线_
命名接收函数的参数时,其值将被视为未使用的值并被丢弃。 当您不需要检查接收到的消息,而只想让它传达特定的操作码时,这就很有用了:
message(42) UniverseCalls {}
contract Example { receive(_: UniverseCalls) { // Got a Message with opcode 42 }}