首页 > 其他分享 >Rust中的范型-学习随笔

Rust中的范型-学习随笔

时间:2022-12-24 14:33:07浏览次数:43  
标签:范型 get self Point Rust largest 随笔 fn

函数中的范型(含范型特征约束)

fn get_largest<T: std::cmp::PartialOrd>(a: T, b: T) -> T {
    if a > b {
        a
    }
    else {
        b
    }
}


fn main() {
    println!("{}", get_largest::<u32>(10, 20));
    println!("{}", get_largest::<f32>(0.1, 0.4));
}

 

结构体中的范型

struct Point<T> {
  x: T,
  y: T,
}

// T满足两种特征Clone 和 std::cmp::PartialOrd
impl<T: Clone + std::cmp::PartialOrd> Point<T> {
  fn largest(&self) -> T {
    if self.x > self.y {
      self.x.clone()
    }
    else {
      self.y.clone()
    }
  }
}

impl Point<f32> {
  /**
   * 点到原点(0,0)的距离
   */
  fn get_distance_from_origin(&self) -> f32 {
    (self.x.powi(2) + self.y.powi(2)).sqrt()
  }
}

struct Line<T> {
  from: T,
  to: T,
}

impl Line<Point<f32>> {
  /**
   * 两点间的距离
   */
  fn get_two_point_distance(&self) -> f32 {
    ((self.to.x - self.from.x).powi(2) + (self.to.y - self.from.y).powi(2)).sqrt()
  }
}

fn main() {
  let p1: Point<f32> = Point { x: 10.0, y: 20.0 };
  println!("{:?}", p1.largest());
  println!("{:?}", p1.get_distance_from_origin());
  let p2 = Point { x: 12.0, y: 24.0 };
  let line = Line { from: p1, to: p2 };
  println!("{:?}", line.get_two_point_distance());
}

 

标签:范型,get,self,Point,Rust,largest,随笔,fn
From: https://www.cnblogs.com/fanqshun/p/17002843.html

相关文章

  • 我的第一篇随笔
    C++核心编程本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。1内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进......
  • c++随笔测试(Corner of cpp)
    在c++17下,程序的输出是什么?(有可能编译出错,有可能输出未知,有可能是未定义行为)点击查看代码#include<iostream>voidfoo(unsignedint){std::cout<<"uint";}voidfo......
  • 《VR 游戏:未来充满无限可能》读后随笔
    随着元宇宙概念的火爆,VR作为虚拟世界和现实世界连接的桥梁,VR游戏成为了元宇宙的重要载体。从这篇文献中可以得知,越来越多的资源开始涌入VR这条赛道。11月2日,索尼宣布......
  • 《基于 Unity3D 的虚拟现实游戏设计与实现 ——以<VR 动物园>项目为例》读后随笔
    随着虚拟现实技术和游戏行业的融合发展,具有更强沉浸感、交互性和娱乐性的VR游戏也获得了充足的发展空间,但是作为高技能人才培养的高职院校却与VR行业新技术的发展渐行......
  • 每日随笔更新小的细节技术
    centos如果有的repo失效,每次安装或者更新都会报错  首先执行yumrepolist,查看当前已经安装的repo及ID  如果要去除某一个repoid更新的话,可以执行如下命令:yum......
  • 使用perf工具分析rust代码运行性能
    前言perf是内置于Linux内核源码树中的系统性能剖析(profiling)工具,原理是在CPU的PMUregister中Get/Setperformancecounters来获得诸如instructionsexecuted,cache-......
  • Rust异步编程
    概要就像其名字所暗示的一样,异步编程,就是非同步的编程。从高层来看,一个异步操作就是在后台执行的操作——程序不会等待异步操作结束,而是立即开始继续执行下一行代码。如......
  • rust模块化
    模块化关键字模块以文件为单位mod最重要的关键字,引用以后即可用use引入的防范可以使用缩写例子同级文件src/main.rspubmoddog;fnmain(){dog::sleep()......
  • GUI随笔
    ####GUI是一个很大的话题,从Win32(windows基础API编程)到MFC,QT再到DuiLib,WPF,Winform再到Html这是一个很漫长的路,下面是我对这个界面库的见解就对我而言,或者说目测软件开发,......
  • MarkDown使用相关随笔
    1.标题Maekdown里面的标题有多级标题,构造标题的方法为#*n+空格+标题名,其中n的数值即#号的数量代表几级标题例如:如果是##+空格+苹果,那么就会生成名字为苹果的二级标题......