Comments and Logging

Icon Link注释和日志

Icon Link注释

在 Sway 中,注释以两个斜杠开头,并持续到行末。对于跨越多行的注释,需要在每一行包含//

// hello world
// let's make a couple of lines
// commented.

你也可以将注释放在包含代码的行末。

fn main() {
let baz = 8; // Eight is a lucky number
}

你还可以使用块注释

fn main() {
/_
You can write on multiple lines
like this if you want
_/
let baz = 8;
}

Icon LinkLogging

logging库提供了一个通用的log函数,可以使用use std::logging::log导入,并用于记录任何类型的变量。每次调用log都会向收据列表追加一个receiptlog可以生成两种类型的收据:LogLogData

fn log_values(){
// 生成一个 Log 收据
log(42);
 
// 生成一个 LogData 收据
let string = "sway";
log(string);
}

Icon LinkLog 收据

Log收据用于生成非引用类型,即boolu8u16u32u64

例如,使用log(x)记录一个整数变量x,其值为42,可能会生成以下收据:

"Log": {
"id": "0000000000000000000000000000000000000000000000000000000000000000",
"is": 10352,
"pc": 10404,
"ra": 42,
"rb": 1018205,
"rc": 0,
"rd": 0
}

注意,当使用log时,ra将包含被记录的值。附加寄存器rcrd在使用log时将为零,而rb可能包含一个非零值,代表log实例的唯一 ID。这个唯一 ID 本身并没有意义,但允许 Rust 和 TS SDK 通过在 JSON ABI 文件中查找 log ID 来知道被记录数据的类型。

Icon LinkLogData 收据

对于引用类型,包括除非引用类型以外的所有类型;以及大于 64 位整数的非引用类型,例如u256,会生成LogData

例如,使用log(b)记录一个b256变量b,其值为0x1111111111111111111111111111111111111111111111111111111111111111,可能会生成以下收据:

"LogData": {
"data": "1111111111111111111111111111111111111111111111111111111111111111",
"digest": "02d449a31fbb267c8f352e9968a79e3e5fc95c1bbeaa502fd6454ebde5a4bedc",
"id": "0000000000000000000000000000000000000000000000000000000000000000",
"is": 10352,
"len": 32,
"pc": 10444,
"ptr": 10468,
"ra": 0,
"rb": 1018194
}

请注意,上面收据中的data将以十六进制形式包含被记录的值。与Log收据类似,附加寄存器会被写入:当使用log时,ra始终为零,而rb将包含log实例的唯一 ID。

Icon InfoCircle

注意 Rust SDK 提供了API ,允许您检索已记录的值并根据 JSON ABI 文件中指示的类型将其显示为漂亮的形式。