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

有经验的唐山网站建设企业管理咨询服务协议

有经验的唐山网站建设,企业管理咨询服务协议,华为手机应用引擎,天津滨海新区小程序网站建设目录 前言 函数指针 函数当作另一个函数的参数 函数当作另一个函数的返回值 闭包 方法 关联函数 总结 前言 在前面几课中#xff0c;我们都或多或少的接触到了rust中的函数#xff0c;rust中的函数和其他语言的并没有什么不同#xff0c;简单的语法不在这篇文章中赘…目录 前言 函数指针 函数当作另一个函数的参数 函数当作另一个函数的返回值 闭包 方法 关联函数 总结 前言 在前面几课中我们都或多或少的接触到了rust中的函数rust中的函数和其他语言的并没有什么不同简单的语法不在这篇文章中赘述我们聊一聊函数式编程语言中的函数在函数式编程中例如Scala函数是一等公民函数可以被当作参数和返回值。 函数指针 函数指针是指向函数的指针(存储了函数的地址) 听起来像是废话我们通过代码来看看 fn main() {let a: fn(str) - usize get_length;let a_len a(hello); }fn get_length(x: str) - usize {x.len() }上面代码中我们定义了一个普通的函数在main函数中我们使用a接收了函数名可以注意看下变量a的类型这就是函数类型变量a就是函数指针。我们通过a去调用函数和通过get_length去调用函数取得的效果是一样的。 函数当作另一个函数的参数 fn main() {let f: fn(str) - usize get_length;let res get_length_plus(f, hello-rust); }fn get_length(x: str) - usize {x.len() }fn get_length_plus(f: fn(str) - usize, other: str) - usize {let len f(other);len } 上面的代码中定义了2个函数其中get_lengrh_plus函数的入参是一个函数类型意味着满足该类型的函数都可以传递进来。 函数当作另一个函数的返回值 fn main() {let ff: fn(i32, i32) - i32 get_function(add);let res: i32 ff(1, 2);println!(res {}, res); }fn get_function(op: str) - fn(i32, i32) - i32 {fn add(a: i32, b: i32) - i32 {a b}fn sub(a: i32, b: i32) - i32 {a - b}fn default(a: i32, b: i32) - i32 {0}match op {add add,sub sub,_ default,} }在上面代码中我们将函数作为另一个函数的返回值。 闭包 闭包是匿名函数先看一下闭包的语法 fn main() {let f1: fn(str) - usize |x: str| - usize { x.len() };f1(hello); } 闭包的语法和函数的语法基本一样只是形参的地方使用双竖线表示。闭包有很多省略规则但是初学者不建议省略太多按部就班的来。就好像Scala一样下划线写的太多组内的同学都看不懂我的代码导致我注释写的比代码都长。 闭包还有一个特性就是可以捕捉外部的变量例如下面的代码变量y虽然定义在闭包外部但是闭包中使用了变量y此时闭包会捕捉y。 fn main() {let y 1;let f2 |x: i32| { x y };println!(f2 res {}, f2(5)); } 方法 在大部分编程语言中函数和方法是特别类似的2个东西例如在java中方法特指属于某个对象的函数而静态方法属于某个类的函数。Rust中也一样结构体的函数称之为方法不过静态方法在Rust中称为关联函数名字叫法不用其实都差不多可以类比着学习我们先看看方法。 下面代码中我们定义了结构体Student并且使用impl块定义Student的方法在impl块中定义了2个方法分别是get_name1和get_name2需要注意的点是在方法的形参中分别使用了self和self:Self这两种写法是等价的self代表的是当前的实例类似java中的self而Self指的是当前的结构体类型。 struct Student {name: String,age: i32, }impl Student {fn get_name1(self: Self) {println!(i am {}, age {}, self.name, self.age);}fn get_name2(self) {println!(i am {}, age {}, self.name, self.age);}}fn main() {let s1 Student {name: String::from(wang),age: 24,};s1.get_name1();} 关联函数 关联函数类似Java中的类静态方法通过类名的方式调用在rust中叫做关联函数关联结构体的函数代码如下还是在impl块中定义和方法的区别在于无需加上self形参这就代表该函数不再是方法而是一个关联函数使用方式为结构体名称::函数名。 fn main() {let s1 Student {name: String::from(wang),age: 24,};Student::learn(); }struct Student {name: String,age: i32, }impl Student {fn learn() {println!(learn);} } 总结 这一节介绍了Rust中的函数、闭包、方法和关联函数等知识点。和其他的编程语言并没有什么不同。
http://www.w-s-a.com/news/910904/

相关文章:

  • 做暧网站网站备案ps
  • 知名网站建设公司电话长子网站建设
  • 网站建设的意义与目的建立什么船籍港
  • 广州注册公司营业执照网站建设代码优化
  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计
  • 网站代码加密了怎么做兰州最新大事
  • 现在ui做的比较好的网站去年做啥网站致富
  • 广东网站建设咨询电话好牌子网
  • 公司怎样制作网站南阳网站关键词
  • 营销型网站建设与网盟完整php网站开发
  • 网站做微信链接怎么做的石桥铺网站建设公司
  • 济南mip网站建设公司做图书馆网站模板
  • app 门户网站网站项目框架
  • 做网站视频网站备案 新闻审批号
  • 织梦网站怎么居中视频网站开发与制作
  • 网站上海备案佛山网站seo哪家好
  • 品牌形象网站有哪些珠海市区工商年报在哪个网站做
  • 注册域名不建设网站seo外包服务方案
  • 如何进行外贸网站建设wordpress文章输入密码可见
  • 政务网站建设索引常州做网站信息
  • 南宁做网站找哪家好wordpress 更改首页
  • 一个人在家做网站建设品牌策划流程
  • 小网站广告投放wordpress页面添加js
  • 仿制别人的竞价网站做竞价犯法吗wordpress添加版块
  • wordpress主题 站长互联网站备案表
  • 广州品牌策划公司排行南宁seo网络推广公司
  • 营销型网站图片肯德基网站开发
  • 网站的外链是什么wordpress开启菜单