rust属性

这篇具有很好参考价值的文章主要介绍了rust属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、属性是什么

属性是一种由编译器使用的元数据。

二、属性语法

内部属性以 #! 开头,应用于包含它的程序项。

   #![ Attr ]

外部属性以# 开头,应用于属性后面的内容。

   #[ Attr ]

Attr可以是以下形式

   IDENTIFIER
   IDENTIFIER = (STRING_LITERAL | RAW_STRING_LITERAL)
   IDENTIFIER ( ( IDENTIFIER (, IDENTIFIER)* ,? )? )
   IDENTIFIER ( ( MetaNameValueStr (, MetaNameValueStr)* ,? )? )

例子:

#![crate_type = "lib"]
// 标记为单元测试的函数
#[test]
fn test_foo() {
     /* ... */
}
// 一个条件编译模块
#[cfg(target_os = "linux")]
mod bar {
     /* ... */
}
// 用于静音lint检查后报告的告警和错误提醒
#[allow(non_camel_case_types)]
type int8_t = i8;
// 适用于整个函数的内部属性
fn some_unused_variables() {
     #![allow(unused_variables)]
     let x = ();
     let y = ();
     let z = ();
}

三、属性分类

(一)内置属性
所有内置属性:


    条件编译(Conditional compilation)
        cfg — 控制条件编译。
        cfg_attr — 选择性包含属性。
    测试(Testing)
        test — 将函数标记为测试函数。
        ignore — 禁止测试此函数。
        should_panic — 表示测试应该产生panic。
    派生(Derive)
        derive — 自动部署trait实现
        automatically_derived — 用在由derive创建的实现上的标记。
    宏(Macros)
        macro_export — 导出声明宏(macro_rules宏),用于跨crate的使用。
        macro_use — 扩展宏可见性,或从其他crate导入宏。
        proc_macro — 定义类函数宏。
        proc_macro_derive — 定义派生宏。
        proc_macro_attribute — 定义属性宏。
    诊断(Diagnostics)
        allow、warn、deny、forbid — 更改默认的lint检查级别。
        deprecated — 生成弃用通知。
        must_use — 为未使用的值生成lint提醒。
    ABI、链接(linking)、符号(symbol)、和FFI
        link — 指定要与外部(extern)块链接的本地库。
        link_name — 指定外部(extern)块中的函数或静态项的符号(symbol)名。
        no_link — 防止链接外部crate。
        repr — 控制类型的布局。
        crate_type — 指定crate的类别(库、可执行文件等)。
        no_main — 禁止发布main符号(symbol)。
        export_name — 指定函数或静态项导出的符号(symbol)名。
        link_section — 指定用于函数或静态项的对象文件的部分。
        no_mangle — 禁用对符号(symbol)名编码。
        used — 强制编译器在输出对象文件中保留静态项。
        crate_name — 指定crate名。
    代码生成(Code generation)
        inline — 内联代码提示。
        cold — 提示函数不太可能被调用。
        no_builtins — 禁用某些内置函数。
        target_feature — 配置特定于平台的代码生成。
        track_caller - 将父调用位置传递给std::panic::Location::caller()。
    文档(Documentation)
        doc— 指定文档。更多信息见 The Rustdoc Book。Doc注释会被转换为doc属性。
    预导入包(Preludes)
        no_std — 从预导入包中移除std。
        no_implicit_prelude — 禁用模块内的预导入包查找。
    模块(Modules)
        path — 指定模块的源文件名。
    极限值设置(Limits)
        recursion_limit — 设置某些编译时操作的最大递归限制。
        type_length_limit — 设置多态类型(polymorphic type)单态化过程中构造具体类型时所做的最大类型替换次数。
    运行时(Runtime)
        panic_handler — 设置处理panic的函数。
        global_allocator — 设置全局内存分配器。
        windows_subsystem — 指定要链接的windows子系统。
    特性(Features)
        feature— 用于启用非稳定的或实验性的编译器特性。参见 The Unstable Book 了解在rustc中实现的特性。
    类型系统(Type System)
        non_exhaustive — 表明一个类型将来会添加更多的字段/变体。

(二)宏属性
(三)派生宏辅助属性
(四)外部工具属性
由外部工具使用的属性,这些工具必须存在。
这种属性的路径的第一段是工具的名称。
如果使用了 no_implicit_prelude属性,则外部工具属性不可用。
目前能识别的工具是 “clippy” 和 “rustfmt”。文章来源地址https://www.toymoban.com/news/detail-725394.html

// 告诉rustfmt工具不要格式化以下元素。
#[rustfmt::skip]
struct S {
}
// 控制clippy工具的“圈复杂度”极限值。
#[clippy::cyclomatic_complexity = "100"]
pub fn f() {}

到了这里,关于rust属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 遇到跨端开发或多项目开发时,遇到的一些问题探讨,后端开发语言如何选择?

    ​最近有同学问我,做后端开发项目时用php,java,c#,go,pathon...哪个好,从最近阿里云、美团服务器崩溃来看,我想给你最直接的回答是,没有完美的,只有适合自己的。咱们讨论最多的问题就是跨多端开发,以及多项目开发后期所带来的升级、维护等相关问题,接下来就

    2024年02月04日
    浏览(47)
  • 前端jd要求:了解一门后端开发语言优先 解决方案之Node.js

    作为前端开发者,了解一门后端开发语言可以为我们提供更多的职业机会和技术优势。在当今的技术领域中,前后端分离的开发模式已经成为主流,前端和后端的协作和沟通变得越来越紧密。因此,作为前端开发者,学习一门后端语言已经成为提高自己技能的重要途径。 以下

    2024年02月12日
    浏览(52)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(50)
  • rust属性

    属性是一种由编译器使用的元数据。 内部属性以 #! 开头,应用于包含它的程序项。 外部属性以# 开头,应用于属性后面的内容。 Attr可以是以下形式 例子: (一)内置属性 所有内置属性: (二)宏属性 (三)派生宏辅助属性 (四)外部工具属性 由外部工具使用的属性,

    2024年02月07日
    浏览(22)
  • Rust中的derive属性详解

    1. Rust中的derive是什么? 在Rust语言中, derive 是一个属性,它可以让编译器为一些特性提供基本的实现。这些特性仍然可以手动实现,以获得更复杂的行为。 2. derive的出现解决了什么问题? derive 属性的出现解决了手动实现一些特性时需要编写大量重复代码的问题。它可以让

    2023年04月15日
    浏览(23)
  • rust跟我学:文件时间属性获得方法

                图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎样获得杀毒软件的病毒库时间的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍

    2024年01月17日
    浏览(63)
  • rust跟我学三:文件时间属性获得方法

                图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎样获得杀毒软件的病毒库时间的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍

    2024年01月17日
    浏览(60)
  • [通知]rust跟我学:文件时间属性获得方法文章已上线

    大家好,我是带剑书生,开源库get_local_info的作者。目前我的付费专栏已经上线第七篇文章,用于介绍在实现get_local_info过程中,遇到该问题所使用的解决方法,喜欢的朋友可以去订阅了,19.9元,非常便宜的价格,做开源不容易。希望能帮助您在学习Rust时,少走弯路,尽快进

    2024年01月17日
    浏览(53)
  • java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性

    目录 一、使用场景 二、环境准备 1、引入依赖 2、实体类 三、示例 1、不返回空值 (1)方式 (2)测试 (3)说明 2、不返回部分属性 (1)方式 (2)测试 四、 Jackson常用注解 1、 @JsonProperty 2、@JsonPropertyOrder 3、@JsonInclude 4、@JsonIgnoreProperties 5、@JsonFormat 6、@JsonUnwrapped         在开发过程

    2024年02月04日
    浏览(50)
  • Vue入门三(表单控制|购物车案例|v-model进阶|与后端交互|计算属性|监听属性|Vue生命周期)

    v-model双向数据绑定,还可以对输入框数据进行一定的限定。 v-modle 释义 lazy 等待input框的数据绑定时区焦点之后再变化 number 以数字开头并只保留后面的数字,不保留字母;字母开头都保留 trim 去除首位的空格 与后端交互统一使用json编码格式 与后端交互涉及到跨域问题后,

    2024年01月21日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包