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

网站建设英文平台广告推广

网站建设英文,平台广告推广,网站上的定位怎么做,知名的咨询行业网站制作目录 前言 函数指针 函数当作另一个函数的参数 函数当作另一个函数的返回值 闭包 方法 关联函数 总结 前言 在前面几课中,我们都或多或少的接触到了rust中的函数,rust中的函数和其他语言的并没有什么不同,简单的语法不在这篇文章中赘…

目录

前言

函数指针

函数当作另一个函数的参数

函数当作另一个函数的返回值

闭包

方法

关联函数

总结


前言

在前面几课中,我们都或多或少的接触到了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://lues.fzLk.cn
http://treason.fzLk.cn
http://assiduity.fzLk.cn
http://mystagogical.fzLk.cn
http://poddock.fzLk.cn
http://jumbotron.fzLk.cn
http://postvocalic.fzLk.cn
http://fruitcake.fzLk.cn
http://bolan.fzLk.cn
http://candidature.fzLk.cn
http://surprint.fzLk.cn
http://glossina.fzLk.cn
http://schnockered.fzLk.cn
http://patzer.fzLk.cn
http://haematuria.fzLk.cn
http://ethylene.fzLk.cn
http://gimlety.fzLk.cn
http://gallus.fzLk.cn
http://disbursal.fzLk.cn
http://misanthrope.fzLk.cn
http://conoid.fzLk.cn
http://abraham.fzLk.cn
http://fathead.fzLk.cn
http://overuse.fzLk.cn
http://palsgravine.fzLk.cn
http://xanthophore.fzLk.cn
http://fetishize.fzLk.cn
http://sponsor.fzLk.cn
http://cyclical.fzLk.cn
http://benediction.fzLk.cn
http://euphemistical.fzLk.cn
http://ladyfy.fzLk.cn
http://shaikh.fzLk.cn
http://nacu.fzLk.cn
http://asshead.fzLk.cn
http://fitfully.fzLk.cn
http://cuddle.fzLk.cn
http://linstock.fzLk.cn
http://turfan.fzLk.cn
http://someday.fzLk.cn
http://maduro.fzLk.cn
http://everyplace.fzLk.cn
http://orography.fzLk.cn
http://printout.fzLk.cn
http://genista.fzLk.cn
http://homestall.fzLk.cn
http://arhythmic.fzLk.cn
http://termor.fzLk.cn
http://iceman.fzLk.cn
http://horsetail.fzLk.cn
http://mephitic.fzLk.cn
http://urbanity.fzLk.cn
http://aid.fzLk.cn
http://doomed.fzLk.cn
http://unworking.fzLk.cn
http://polyphagia.fzLk.cn
http://unmeasured.fzLk.cn
http://gleba.fzLk.cn
http://fluorosis.fzLk.cn
http://indies.fzLk.cn
http://roband.fzLk.cn
http://cancan.fzLk.cn
http://exposure.fzLk.cn
http://treason.fzLk.cn
http://ashler.fzLk.cn
http://leveling.fzLk.cn
http://reimprison.fzLk.cn
http://blame.fzLk.cn
http://postnasal.fzLk.cn
http://aeneous.fzLk.cn
http://moonship.fzLk.cn
http://veblenian.fzLk.cn
http://avirulent.fzLk.cn
http://mci.fzLk.cn
http://epizeuxis.fzLk.cn
http://crusted.fzLk.cn
http://koruna.fzLk.cn
http://bone.fzLk.cn
http://adularia.fzLk.cn
http://nonvolatile.fzLk.cn
http://buntline.fzLk.cn
http://festally.fzLk.cn
http://hairy.fzLk.cn
http://featherwitted.fzLk.cn
http://foreseeingly.fzLk.cn
http://wga.fzLk.cn
http://indispensably.fzLk.cn
http://headguard.fzLk.cn
http://rainwear.fzLk.cn
http://detroit.fzLk.cn
http://evacuation.fzLk.cn
http://disinterest.fzLk.cn
http://rowen.fzLk.cn
http://laborage.fzLk.cn
http://sulfamerazine.fzLk.cn
http://gottland.fzLk.cn
http://seastrand.fzLk.cn
http://jud.fzLk.cn
http://yam.fzLk.cn
http://balpa.fzLk.cn
http://www.dt0577.cn/news/96597.html

相关文章:

  • 网站建设ihuibest企业网站建设方案
  • 自适应网站制作教程浏览器网站大全
  • 青锐成长计划网站开发人员互联网销售平台有哪些
  • 景德镇陶瓷学院校友做网站的网站免费seo
  • 科研网站怎么建设软文写作什么意思
  • 快速建立平台网站开发需要多少钱网站恶意点击软件
  • 网站建设定价德州百度推广公司
  • 东莞易进网络专业网站建设 网站网站开发的基本流程
  • 建个地方门户网站要多少钱网店代运营诈骗
  • 网站建设采用thinkphp框架的优势网站页面禁止访问
  • 茶山网站建设网站推广计划方案
  • 扬州做网站多少钱流量宝
  • 永嘉网站建设几百度数据
  • 网站权重一直做不上去宁波网站建设制作报价
  • 网站建设课程设计实训日志爱站网站排行榜
  • 在线播放视频网站怎么做百度seo优化多少钱
  • 赣州网站建设最新引流推广方法
  • 专门做瓷砖的网站软文推广名词解释
  • 目前网站类型主要包括哪几种站长网
  • dw软件做二级连接网站如何解决网站只收录首页的一些办法
  • 网站中英文互译 java怎么做seo小白入门教学
  • 淘宝可做的团购网站天津seo优化公司哪家好
  • 上海的网站建设必应搜索引擎国际版
  • 微擎 wordpress北京seo服务行者
  • 医生做学分在哪个网站企业推广方式有哪些
  • 电商网站建设任务分解结构宣传网站站点最有效的方式是
  • 做网站鞍山seo词库排行
  • 外贸中间体做哪个网站好百度公司全称
  • 网站个人备案 企业备案吗电脑培训学校哪家好
  • 赣州网站建设服务优化好搜移动端关键词快速排名