当前位置: 首页 > news >正文

南宁老牌网站建设公司小游戏开发

南宁老牌网站建设公司,小游戏开发,wordpress freehao123,网站模仿泛型 泛型#xff08;Generics#xff09;是一种程序设计风格#xff0c;它允许程序员在强类型语言#xff08;例如rust#xff0c;c##xff0c;c#xff09;中编写代码时使用通用类型。以rust为例#xff0c;如果你想实现一个通用的add函数#xff0c;让其在u8, i3…泛型 泛型Generics是一种程序设计风格它允许程序员在强类型语言例如rustc#c中编写代码时使用通用类型。以rust为例如果你想实现一个通用的add函数让其在u8, i32, u64等类型中通用。如果没有泛型虽然它们的逻辑是一致的但是你需要为不同类型编写不同的函数而泛型帮助我们只需要编写一个函数实现通用逻辑即可。例如: fn main() {println!({}, add(1u8, 2u8));println!({}, add(1i32, 2i32));println!({}, add(1f32, 2f32)); }fn addT: std::ops::AddOutput T(a:T, b:T) - T {a b }执行这段代码输出结果如下所示 3 3 3可以看到这段代码成功执行add函数接受多种类型的参数帮我们减少了代码的编写。泛型是rust多态能力的一种体现。在动态语言中调用方法一般不受类型约束称其为“鸭子类型”。也就是说一个东西看起来像鸭子叫起来像鸭子游起来也像鸭子那就认为它就是鸭子。 泛型是一个非常强大的工具但是如何合理的使用它才是问题。在C/C和Rust里掌握泛型对于程序员而言是比较困难的一点。例如泛型的编译错误有时候很难通过编译器的报错信息进行修正 上面代码的 T 就是泛型参数实际上在 Rust 中泛型参数的名称你可以任意起但是出于惯例我们都用 T ( T 是 type 的首字母)来作为首选这个名称越短越好除非需要表达含义否则一个字母是最完美的。 使用泛型参数有一个先决条件必需在使用前对其进行声明。 fn addT: std::ops::AddOutput T(a:T, b:T) - T这个add函数的定义可以这样理解函数名后面的T是泛型类型我们在后面的函数参数以及返回值使用了该类型因此必须在使用前对其进行声明。而std::ops::AddOutput T是对泛型的约束。因为不是所有的T类型都可以进行运算符操作。 上面的示例展示了rust中的函数泛型下文将介绍rust中各种各样的泛型。 结构体中使用泛型 结构体中的字段类型也可以用泛型来定义。例如 struct PointT {x: T,y: T, }fn main() {let integer Point { x: 5, y: 10 };let float Point { x: 1.0, y: 4.0 }; }和前面的函数中使用泛型类似我们依旧需要注意两个点。 提前声明在使用泛型类型之前必需要进行声明 PointT接着就可以在结构体的字段类型中使用 T 来替代具体的类型。x 和 y 是相同的类型它们都是类型T。 枚举中使用泛型 在Rust中枚举中很典型的泛型有Option和Results。Option这个枚举类型用来判断一个数据是有值而Results则是用来判断值是否正确。它们的定义如下所示 enum OptionT {Some(T),None, }enum ResultT, E {Ok(T),Err(E), }Result中的泛型类型有两个分别是T和E。泛型类型可以有多个但是如果太过复杂例如T, U, V, W, X, Y, Z这种包含超过5种泛型类型的此时最后考虑将其进行拆分。 方法中使用泛型 一开始的示例是在函数中使用泛型现在我们来看一下如何在方法中使用泛型。实际上和函数中使用类似。例如 #![allow(unused)] struct PointT {x: T,y: T, }// 提前声明泛型类型T由于是对泛型结构体Point实现的方法。因此结构体的名称应该是PointT implT PointT {// 由于在impl处已经提前声明了泛型T因此在方法中不用再次声明了。fn x(self) - T {self.x}// 由于在impl处已经提前声明了泛型T因此在关联函数中不用再次声明了。fn new(x:T, y:T) - PointT {Point { x, y }} }fn main() {let p Point { x: 5, y: 10 };let q Point::new(123.123, 456.456);println!(p.x {}, p.x());println!(q.x {}, q.x()); }使用泛型参数前依然需要提前声明implT 多个泛型参数 泛型类型可以有多个下面是一个例子 #[derive(Debug)] struct PointU, V{x: U,y: V, }implU, V PointU, V {fn new(x:U, y: V) - PointU, V {Point { x, y}}// X, Y这两个泛型类型不属于PointU, V的方法实现因此不能写在impl后面而是需要写在swap后面。// swap的两个参数都不是引用会引起所有权的转移fn swapX, Y(self, p:PointX, Y) - PointU, Y {Point {x: self.x, y: p.y}} }fn main() {let p1 Point::new(1, 2);let p2 Point::new(3.0f32, 4.5);let p3 p1.swap(p2);println!({:?}, p3);}结构体可以有多个泛型类型方法和关联函数等也可以拥有多个泛型类型。需要注意的是swap函数的写法因为X, Y这两个泛型类型不属于PointU, V的方法实现因此不能写在impl后面而是需要写在swap后面。 泛型性能 Rust 通过在编译时进行泛型代码的 单态化monomorphization来保证效率。单态化是一个通过填充编译时使用的具体类型将通用代码转换为特定代码的过程。 这个过程中编译器所做的工作正好与我们在代码中所做的工作相反编译器寻找所有泛型代码被调用的位置并使用泛型代码针对具体类型生成代码。 在编译时就确定的多态势必会导致编译时间变长但是它带来的好处则是代码执行时速度的提高而Trait则可以带来运行时的多态实现原理类似于C的虚表虚指针。 参考资料 Rust语言圣经Rust程序设计语言
http://www.hkea.cn/news/14477178/

相关文章:

  • 广州市城乡建设部网站首页软件技术介绍
  • 深圳极速网站建设推荐购买网站广告位
  • 河南安阳网站建设电气网站设计
  • 重庆网站建设 制作 设计 优惠价合作做网站
  • 福建省建设干部网站公司法人查询系统
  • 班级网站 程序大型网站开发什么书籍好
  • 三门峡住房和建设局网站泰安做网站公司哪家好
  • 开发建设网站需要什么人才做标签这个网站刷单安全吗
  • 杭州自助建站软件企业为什么建立企业网站
  • 自己做产品网站wordpress企业网站制作
  • 电子报 网站开发如何做公司网站制作
  • 灵芝住房和城乡建设局局网站智能制造工程
  • 大气黑色机械企业网站源码石家庄建设厅官方网站
  • 乡村文化建设网站栏目设置wordpress update_post_meta
  • 网站加上视频对seo影响创新的武进网站建设
  • 宁波手机网站制作媚娘直播
  • 网站建设竣工验收报告动漫制作专业简历
  • google 网站突然一条收录也没有wordpress下载弹窗插件
  • 什么东西可以做网站沈阳建信建设工程有限公司
  • 莱州市招聘网站建设网站的要求吗
  • 仿网站被封怎么办建设音乐网站
  • 哈尔滨网站建设方案开发上海网站建设管理系统
  • 网站开发_超速云河北邢台新河网
  • seo优化网站词绵阳住房和城乡建设部网站
  • 网站登录页面模板下载企业网站开发综合实训
  • asp商业网站源码华为手机开发者模式怎么关闭
  • 做网站是学什么编程语言为网站添加统计
  • 做网站技术要求怎么写石排镇网站建设
  • 简单好看个人主页网站模板wordpress管理地址
  • 山东省建设部继续教育网站小学托管班