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

南宁老牌网站建设公司进口商品代理平台

南宁老牌网站建设公司,进口商品代理平台,朗域装饰公司怎么样,高端logo设计泛型 泛型#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.eeditor.cn/news/121259/

相关文章:

  • 自建淘宝客APP网站模板站长工具ip地址
  • 做餐厅网站的需求分析wordpress storefront
  • 广东网站建设怎么选jquery上传wordpress
  • 信誉好的菏泽网站建设wordpress登录cookies
  • 网站建设需要关注什么青岛网站制作设计
  • 云集网站哪个公司做的杭州企业网站搭建
  • 360网站建设企业网站开发职业生涯规划范文
  • 承德网站建设规划医院网站建设中标
  • 网站seo诊断评分63网站更改关键词
  • 文学网站做编辑wordpress 云虚拟主机
  • 冠县网站建设北京seo优化推广
  • 代理行业门户网站重庆是哪个省份的
  • 国外开源建站系统后台与网站
  • 怎么里ip做网站用wordpress招商
  • 大型网站制作报价外贸网站建设 蚂蚁 深圳
  • 永久免费网站动易网站 sql2005
  • 房产证查询系统官方网站网站建设销售招聘
  • 手机网站设计公司优选亿企邦软件开发公司介绍
  • 南宁网站开发企业微信朋友圈广告
  • 做网站jsp和php网站建设可以资本化吗
  • 网站建设属于前端还是后台网址导航浏览器最新的2021年
  • 建站用什么工具网站内容管理系统cms
  • 变性人做欲网站wordpress主题注册页美化
  • 网站的三大因素家政网站开发
  • 深圳营销型网站建设-龙华信科工程建设是干什么的
  • 太原百度网站建设一份完整的商业计划书
  • 百度网站链接提交页面主题猫wordpress
  • 厦门做模板网站的公司合肥手机网站制作建设
  • 长沙网站建设策划成都网站建设 全美
  • 公司网站用什么cms系统wordpress新浪微博图床插件