在 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;
}
logging
库提供了一个通用的log
函数,可以使用use std::logging::log
导入,并用于记录任何类型的变量。每次调用log
都会向收据列表追加一个receipt
。log
可以生成两种类型的收据:Log
和LogData
。
fn log_values(){
// 生成一个 Log 收据
log(42);
// 生成一个 LogData 收据
let string = "sway";
log(string);
}
Log
收据 Log
收据用于生成非引用类型,即bool
、u8
、u16
、u32
和u64
。
例如,使用log(x)
记录一个整数变量x
,其值为42
,可能会生成以下收据:
"Log": {
"id": "0000000000000000000000000000000000000000000000000000000000000000",
"is": 10352,
"pc": 10404,
"ra": 42,
"rb": 1018205,
"rc": 0,
"rd": 0
}
注意,当使用log
时,ra
将包含被记录的值。附加寄存器rc
和rd
在使用log
时将为零,而rb
可能包含一个非零值,代表log
实例的唯一 ID。这个唯一 ID 本身并没有意义,但允许 Rust 和 TS SDK 通过在 JSON ABI 文件中查找 log ID 来知道被记录数据的类型。
LogData
收据 对于引用类型,包括除非引用类型以外的所有类型;以及大于 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。
注意 Rust SDK 提供了API ,允许您检索已记录的值并根据 JSON ABI 文件中指示的类型将其显示为漂亮的形式。