【编程开发】Rust 语法速查 & 例子 - 函数 & 行为

本文是关于Rust语言的学习笔记,介绍了特性(trait)、超特性、实现(impl)、函数定义、异步函数、闭包等概念,以及如何在Rust中使用它们来实现代码抽象和行为共享。
摘要由CSDN通过智能技术生成

本系列是学习 Rust 的学习笔记,本编主要对 https://cheats.rs/ 的语法速查表进行翻译学习

定义代码单元及其抽象。

示例说明
trait T {}定义一个特性; 通常用于其他类型可以实现的通用行为。
trait T : R {}T超特性R的子特性。任何S在实现T之前必须先实现R
impl S {}为类型S实现的实现功能,例如方法。
impl T for S {}为类型S实现特性T
impl !T for S {}禁用自动派生的自动特性
fn f() {}定义一个函数; 或者如果在impl内部则是关联函数。
     ~~~~     fn f() -> S {}相同,返回类型为S的值。
     ~~~~     fn f(&self) {}定义一个方法,例如,在impl S {}内。
const fn f() {}在编译时可用的常量fn,例如,const X: u32 = f(Y)
async fn f() {}异步函数转换,使f返回一个impl Future
     ~~~~     async fn f() -> S {}相同,但使f返回一个impl Future<Output=S>
     ~~~~     async { x }在函数内部使用,使{ x }成为一个impl Future<Output=X>
fn() -> S函数指针,持有可调用的地址的内存。
Fn() -> S可调用特性(也有FnMutFnOnce),由闭包、fn等实现。
| | {}一个闭包,借用其捕获(例如,一个局部变量)。
     ~~~~     |x| {}接受一个名为x的参数的闭包,主体是块表达式。
     ~~~~     |x| x + x相同,没有块表达式; 只能由单个表达式组成。
move |x| x + y拥有其捕获的闭包;即,y转移到闭包中。
return | true有时闭包看起来像逻辑或(这里: 返回一个闭包)。
unsafe如果你喜欢在周五晚上调试段错误; 不安全的代码
     ~~~~     unsafe fn f() {}意味着“调用可能会导致UB,你必须检查要求”。
     ~~~~     unsafe trait T {}意味着“T的粗心实现可能导致UB实现者必须检查”。
     ~~~~     unsafe { f(); }向编译器保证“我已经检查过要求,相信我”。
     ~~~~     unsafe impl T for S {}保证 ST方面行为良好;人们可以安全地在S上使用T

函数 & 行为 的简单示例:

  1. 特性(Traits)

    • 特性是 Rust 中用于定义共享行为的一种机制。
    • 示例:定义一个特性 Drawable,表示可绘制的对象,其中包含一个方法 draw
    trait Drawable {
        fn draw(&self);
    }
    
  2. 超特性(Supertraits)

    • 超特性是一个特性可以继承其他特性的方法。
    • 示例:定义一个特性 Shape,它继承了 Drawable,表示形状对象。
    trait Shape: Drawable {
        // 其他方法定义
    }
    
  3. 实现(Implementation)

    • 实现是为类型提供特性的具体实现。
    • 示例:为结构体 Circle 实现 Drawable 特性。
    struct Circle {
        // 结构体字段
    }
    
    impl Drawable for Circle {
        fn draw(&self) {
            // 绘制圆形的具体实现
        }
    }
    
  4. 特性实现(Trait Implementation)

    • 特性实现是为类型提供特性的具体实现。
    • 示例:为结构体 Rectangle 实现 Shape 特性。
    struct Rectangle {
        // 结构体字段
    }
    
    impl Shape for Rectangle {
        // 实现 Shape 特性的方法
    }
    
  5. 自动特性(Auto Traits)

    • 自动特性是由编译器自动生成的一种特性。
    • 示例:禁用自动实现 SendSync 特性。
    struct MyType;
    
    unsafe impl !Send for MyType {}
    unsafe impl !Sync for MyType {}
    
  6. 函数定义和使用

    • 函数是用于执行特定任务的代码单元。
    • 示例:定义一个函数 add,用于求两个整数的和。
    fn add(x: i32, y: i32) -> i32 {
        x + y
    }
    
  7. 异步函数

    • 异步函数是一种特殊类型的函数,可以在执行期间挂起并在后续恢复执行。
    • 示例:定义一个异步函数 fetch_data,用于从远程服务器获取数据。
    async fn fetch_data(url: &str) -> Result<String, Error> {
        // 异步请求数据并返回结果
    }
    
  8. 闭包

    • 闭包是一种可以捕获其环境并在稍后执行的匿名函数。
    • 示例:定义一个闭包,用于计算两个数字的和。
    let add_closure = |x, y| x + y;
    let result = add_closure(3, 5);
    println!("Result: {}", result); // 输出:8
    
  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值