Sway 编译器支持一系列属性,用于执行各种有用的操作,用于构建、测试和文档化 Sway 程序。以下是所有可用属性的列表:
#[allow(...)]
属性覆盖检查,以便违规行为不会报告。以下检查可以禁用:
#[allow(dead_code)]
禁用死代码检查; #[allow(deprecated)]
禁用对已弃用的结构、函数和其他项的使用检查。 #[doc(..)]
属性指定文档。
以三个斜杠 ///
开头的行文档注释被解释为特殊语法的文档属性。也就是说,它们等效于在注释体周围写上 #[doc("...")]
,即 /// Foo
变为 #[doc("Foo")]
。
以 //!
开头的行注释是文档注释,适用于它们所在源文件的模块。也就是说,它们等效于在注释体周围写上 #![doc("...")]
。//!
模块级别的文档注释应位于 Sway 文件的顶部。
文档可以使用 forc doc
从文档属性中生成。
内联属性建议将标记的函数的副本放置在调用者中,而不是在定义它的地方生成调用函数的代码。
注意:Sway 编译器根据内部启发式方法自动内联函数。不正确地内联函数可能会使程序变慢,因此应谨慎使用此属性。
#[inline(never)]
属性 建议 永远不要执行内联扩展。
#[inline(always)]
属性 建议 始终执行内联扩展。
注意:
#[inline(..)]
的每种形式都是一个提示,没有任何对于语言在调用者中放置标记的函数的要求。
缺少 #[payable]
意味着该方法是非可支付的。当调用一个非可支付的 ABI 方法时,如果调用时转发的硬币数量不能保证为零,则编译器会发出错误。请注意,这仅是一个编译时检查,不会产生任何运行时成本。
在 Sway 中,函数默认为纯函数,但可以通过 storage
函数属性选择为不纯函数。storage
属性可能带有 read
和/或 write
参数,指示函数需要哪种类型的访问。
#[storage(read)]
属性表示函数需要对存储进行读取访问。
#[storage(write)]
属性表示函数需要对存储进行写入访问。
更多详情请参阅 Purity 。
#[test]
属性标记一个函数作为测试执行。
#[test(should_revert)]
属性标记一个应该回滚的测试函数。
更多详情请参阅 Unit Testing 。
#[deprecated]
属性标记一个项目为已弃用,并使编译器对已弃用项目的每次使用发出警告。可以使用 #[allow(deprecated)]
禁用此警告。
可以使用 #[deprecated(note = "your message")]
来改进警告消息。
#[fallback]
属性使编译器将标记的函数用作合约调用的回退函数,这意味着当调用合约并且合约选择失败时,将调用回退函数。