首页 > 其他分享 >Rust 静态分发和动态分发

Rust 静态分发和动态分发

时间:2023-09-24 18:14:27浏览次数:42  
标签:分发 静态 dog Cat Rust animal cat fn speak

首先定义两个结构体 Dog 和 Cat 分别实现 Animal trait

trait Animal {
    fn speak(&self);
}
struct Dog;
impl Animal for Dog {
    fn speak(&self) {
        println!("旺旺.....");
    }
}
struct Cat;
impl Animal for Cat {
    fn speak(&self) {
        println!("喵喵.....");
    }
}

通过泛型实现静态分发

fn animal_speak<T: Animal>(animal: T) {
    animal.speak();
}

fn main() {
    let dog = Dog;
    let cat = Cat;

    animal_speak(dog);
    animal_speak(cat);
}

// 输出:
// 旺旺.....
// 喵喵.....

这样相当于为每个Dog和Cat分别实现了一个animal_speak()方法

fn dog_speak(dog: dog) {
    dog.speak();
}

fn cat_speak(cat: Cat) {
    cat.speak();
}

目前只能看出来静态分发会导致编译后的二进制文件膨胀,至于好处还要和动态分发对比才能知道;

通过&或者Box智能指针来实现动态分发

fn animal_speak(animal: &dyn Animal) {
    animal.speak();
}

fn main() {
    let dog = Dog;
    let cat = Cat;

    animal_speak(&dog);
    animal_speak(&cat);
}

// 输出:
// 旺旺.....
// 喵喵.....

探索Rust中的动态分派

标签:分发,静态,dog,Cat,Rust,animal,cat,fn,speak
From: https://www.cnblogs.com/liuzonglin/p/17724711.html

相关文章

  • pbootcms伪静态教程
    Apache环境和IIS环境默认在根目录加了伪静态规则了,不需要操作,只要主机支持伪静态即可。Nginx环境,请打开nginx.txt文件,把里面的代码复制到配置中,下面我们以宝塔为例,伪静态规则的文件在伪静态代码1location/{2    if (!-e$request_filename){......
  • windows+iis脚本映射方式实现伪静态(包括asp.net)
    一.Windows2008、2012或更高系统     只需要在设置脚本影射的目录下创建web.config文件,其内容为<?xml version="1.0" encoding="UTF-8"?>    <configuration>      <system.webServer>        <handlers>                   ......
  • 为什么 Rust 备受开发者青睐?
    引子作为一名敏锐的前端开发者,您可能早已对Rust有所耳闻,毕竟近几年,使用Rust开发的前端构建工具每经发布,其卓越的性能数据总是能带来社区的一阵惊叹。图片来源:https://swc.rs/例如SWC就在其官网宣称在单线程上的执行速度是传统代码转译工具Babel的20倍。如果在4核......
  • 代码静态扫描
    1.why?开发->测试(OA)sonarQube在OA测试之前的步骤,主要用于开发阶段把控代码质量:a.祖传级代码如何代码质量检测、优化、重构的标准.b.静态代码分析:(1).针对开发人员编写的源代码(2).在不运行的情况下,仅分析或检查源程序的语法、结构、过程、接口等的正确性,找出代码......
  • Rust的语句和表达式
    在Java中经常听到类似赋值语句、lambda表达式的说法,却从来没有在意过所谓的语句和表达式有什么区别,而在实际的使用中,它们好像确实没啥区别,但是在Rust中,语句和表达式就被严格区分开来了,《Rust程序设计语言》中提到Rust的函数体是由一系列语句和一个可选的结尾表达式来构成。Rust......
  • Windows环境下的静态库和动态库介绍
    目录一、简介二、lib库的详细说明静态lib库lib导入库两种库的说明两种lib库的相同点和不同点三、visualstudio静态lib库导出和使用一、简介在Windows系统下常见的库有两种一种是以.lib为扩展名的库,也叫lib库。lib库实际上分为两种:一种是静态链接lib库或者叫做静态lib库,另一......
  • Vue-插槽及自定义事件分发
    一.插槽slot在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。<slot> 元素是一个插槽出口 (slotoutlet),标示了父元素提供的插槽内容 (slotcontent)将在哪里被渲染。 插槽就好比一个占位符,它不是解决页面必须元素的位置,而是解决未......
  • Windows 安装 Rust
    1、安装rustup-init.exehttps://www.rust-lang.org/zh-CN/tools/install1、安装rustup-init.exehttps://www.rust-lang.org/zh-CN/tools/installwindows安装Rust安装太慢解决办法1、打开powershell2、分别执行下面两行代码:$ENV:RUSTUP_DIST_SERVER='https://mirrors.......
  • PostgreSQL负载均衡分发与双主HA架构
    一、风哥PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL负载均衡分发与双主HA架构,学完本课程可以掌握PostgreSQL高可用负载均衡解决方案,PostgreSQL+Keepalived流复......
  • PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构
    一、风哥PG-DBA培训16:PostgreSQL负载均衡分发与双主HA架构本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL主从复制与高可用集群阶段之PostgreSQL负载均衡分发与双主HA架构,学完本课程可以掌握PostgreSQL高可用负载均衡解决方案,PostgreSQL+Keepalived流复制......