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

农业电商平台有哪些国外seo

农业电商平台有哪些,国外seo,做网站贵吗,网上做题扣分在哪个网站上做原文 在Rust中混合匹配,改变和移动 结构模式匹配:极大的改进了C或Java风格的switch语句. Match包含命令式和函数式编程风格:可继续使用break语句,赋值等,不必面向表达式. 按需匹配"借用"或"移动",:Rust鼓励开发者仔细考虑所有权和借用.设计匹配时仅支持…

原文

Rust中混合匹配,改变和移动

结构模式匹配:极大的改进了CJava风格的switch语句.

Match包含命令式和函数式编程风格:可继续使用break语句,赋值等,不必面向表达式.
按需匹配"借用"或"移动",:Rust鼓励开发者仔细考虑所有权和借用.设计匹配时仅支持借用子结构(而不是总移动).

基本匹配

Rust中的match(匹配)式有以下形式:

match INPUT_EXPRESSION {PATTERNS_1 => RESULT_EXPRESSION_1,PATTERNS_2 => RESULT_EXPRESSION_2,...PATTERNS_n => RESULT_EXPRESSION_n
}

其中每个PATTERNS_i至少包含一个模式.模式描述了INPUT_EXPRESSION可计算到的可能值的子集.语法PATTERNS=>RESULT_EXPRESSION"匹配分支",或简叫"分支".

模式可匹配整数或符等简单值;还可通过枚举定义匹配用户定义的符号数据.
示例:

enum Answer {Higher,Lower,Bingo,
}
fn suggest_guess(prior_guess: u32, answer: Answer) {match answer {Answer::Higher => println!("maybe try {} next", prior_guess + 10),Answer::Lower  => println!("maybe try {} next", prior_guess - 1),Answer::Bingo  => println!("we won with {}!", prior_guess),}
}
#[test]
fn demo_suggest_guess() {suggest_guess(10, Answer::Higher);suggest_guess(20, Answer::Lower);suggest_guess(19, Answer::Bingo);
}

模式还可用(如元组,切片,结构)相应模式匹配结构化数据.绑定部分输入局部变量;然后,可在结果式中使用这些变量.

struct GuessState {guess: u32,answer: Answer,low: u32,high: u32,
}
fn suggest_guess_smarter(s: GuessState) {match s {GuessState { answer: Answer::Bingo, guess: p, .. } => {
//..匹配值序列或名值对println!("we won with {}!", p);}GuessState { answer: Answer::Higher, low: _, guess: l, high: h } |GuessState { answer: Answer::Lower,  low: l, guess: h, high: _ } => {
//_匹配单值,作为最后的默认.
//|表示`或者`.let mid = l + ((h - l) / 2);println!("lets try {} next", mid);}}
}
#[test]
fn demo_guess_state() {suggest_guess_smarter(GuessState {guess: 20, answer: Answer::Lower, low: 10, high: 1000});
}

编译时拒绝以下代码.

fn suggest_guess_broken(prior_guess: u32, answer: Answer) {let next_guess = match answer {Answer::Higher => prior_guess + 10,Answer::Lower  => prior_guess - 1,//错误:未完整匹配.};println!("maybe try {} next", next_guess);
}

修复

fn suggest_guess_fixed(prior_guess: u32, answer: Answer) {let next_guess = match answer {Answer::Higher => prior_guess + 10,Answer::Lower  => prior_guess - 1,Answer::Bingo  => {println!("we won with {}!", prior_guess);return;}//补上最后分支};println!("maybe try {} next", next_guess);
}
#[test]
fn demo_guess_fixed() {suggest_guess_fixed(10, Answer::Higher);suggest_guess_fixed(20, Answer::Lower);suggest_guess_fixed(19, Answer::Bingo);
}

代数数据类型和结构不变量

代数数据类型简要描述了数据类,并允许丰富的结构不变量.
Rust中,枚举可定义更加丰富数据类.
如,二叉树或为,或为引用两个子树内部节点.构建树:

enum BinaryTree {Leaf(i32),Node(Box<BinaryTree>, i32, Box<BinaryTree>)
}

Box<V>描述了拥有堆分配的V实例引用;如果拥有Box<V>,则也就拥有了它所包含的V,且可改变它,借出引用等等.

完成Box出域时,自动清理与堆分配的V实例关联的资源.

上面的枚举定义确保,如果得到一个BinaryTree,将总是属于上述二者之一.永远不会遇见无左子的BinaryTree::Node.因此无需检查null.

确实要检查给定的BinaryTreeLeaf还是Node,但编译器会静态确保此类检查:你不会意外地按节点解释Leaf数据,反之亦然.

如下使用match对树中的所有整数求和:

fn tree_weight_v1(t: BinaryTree) -> i32 {match t {BinaryTree::Leaf(payload) => payload,BinaryTree::Node(left, payload, right) => {tree_weight_v1(*left) + payload + tree_weight_v1(*right)}}
}///返回如下的树:
///      +----(4)---+
///      |          |
///   +-(2)-+      [5]
///   |     |   
///  [1]   [3]
fn sample_tree() -> BinaryTree {let l1 = Box::new(BinaryTree::Leaf(1));let l3 = Box::new(BinaryTree::Leaf(3));let n2 = Box::new(BinaryTree::Node(l1, 2, l3));let l5 = Box::new(BinaryTree::Leaf(5));BinaryTree::Node(n2, 4, l5)
}
#[test]
fn tree_demo_1() {let tree = sample_tree();assert_eq!(tree_weight_v1(tree), (1 + 2 + 3) + 4 + 5);
}

代数数据类型创建语言严格执行的结构不变量.

既面向表达式,也面向语句

下面的代码使用区间模式来简化,编写风格类似面向语句语言(如C(或C++,Java等)中的开关(switch)),其中仅针对该分支执行匹配:

fn num_to_ordinal(x: u32) -> String {let suffix;match (x % 10, x % 100) {(1, 1) | (1, 21...91) => {suffix = "st";}(2, 2) | (2, 22...92) => {suffix = "nd";}(3, 3) | (3, 23...93) => {suffix = "rd";}_                     => {suffix = "th";}}return format!("{}{}", x, suffix);
}
#[test]
fn test_num_to_ordinal() {assert_eq!(num_to_ordinal(   0),    "0th");assert_eq!(num_to_ordinal(   1),    "1st");assert_eq!(num_to_ordinal(  12),   "12th");assert_eq!(num_to_ordinal(  22),   "22nd");assert_eq!(num_to_ordinal(  43),   "43rd");assert_eq!(num_to_ordinal(  67),   "67th");assert_eq!(num_to_ordinal(1901), "1901st");
}

静态分析确保:
1,总是在在函数尾,格式!之前初化后缀.
2,执行函数时,最多分配一次后缀.(如果是多次,编译器会提醒你),
面向表达式,则如下:

fn num_to_ordinal_expr(x: u32) -> String {format!("{}{}", x, match (x % 10, x % 100) {(1, 1) | (1, 21...91) => "st",(2, 2) | (2, 22...92) => "nd",(3, 3) | (3, 23...93) => "rd",_     => "th"})
}

想要初化某个状态,然后借用它时,但仅限于某些控制流分支.

fn sometimes_initialize(input: i32) {let string: String; //动态构造串值let borrowed: &str; //引用串数据match input {0...100 => {//临时构造串...string = format!("input prints as {}", input);//...然后从中借用.borrowed = &string[6..];}_ => {//串字面是*已*借用的引用borrowed = "期望0 and 100间";}}println!("borrowed: {}", borrowed);//println!("string: {}", string);//取消上面注释,会报错.借用已借用了串,你不能再用了.
}
#[test]
fn demo_sometimes_initialize() {sometimes_initialize(23);  //此调用初化"串`"`,sometimes_initialize(123); //此调用不会
}

有趣在,匹配后,禁止直接访问串,因为在访问前,必须在每个路径上初化变量.
但,可用borrowed访问串中数据,因为确保已初化了该串.
编译器确保借用的串数据不会超过串自身,且生成代码确保在串域尾,如果已初化它,则会释放它.

总之,为了健壮性,Rust语言确保在引用数据前,总是初化它.

匹配而不移动

匹配输入可不取所有权,直接借用输入;对匹配引用(如&T)至关重要.

上面版本的tree_weight有个很大的缺点:它按值输入树.一旦传递一棵树给tree_weight_v1,这棵树就消失了(如,释放).

#[test]
fn tree_demo_v1_fails() {let tree = sample_tree();assert_eq!(tree_weight_v1(tree), (1 + 2 + 3) + 4 + 5);//assert_eq!(tree_weight_v1(tree), (1 + 2 + 3) + 4 + 5);//取消注释,会报错.
}

然而,这不是匹配造成的;而是函数签名:

fn tree_weight_v1(t: BinaryTree) -> i32 { 0 }
//即此函数拥有了`'t'`的所有权

Rust中,匹配不取所有权,也良好运行.即,要匹配的输入左值式.
匹配,执行此求值,然后检查该内存位置的数据.
(如果输入式变量名或字段/指针解引用,则左值只是该变量或字段/内存的位置.如果输入式是生成未命名临时值函数调用或其他操作,则存储在匹配检查的临时区域(内存位置)中.)

因此,如果仅想借用一棵树而不拥有它的tree_weight版本,则需要利用Rust匹配的该特性.

fn tree_weight_v2(t: &BinaryTree) -> i32 {//表示正在*借用*树,&表示借用.match *t {//解引用BinaryTree::Leaf(payload) => payload,BinaryTree::Node(ref left, payload, ref right) => {//引用分支的引用绑定.tree_weight_v2(left) + payload + tree_weight_v2(right)}}
}
#[test]
fn tree_demo_2() {let tree = sample_tree();assert_eq!(tree_weight_v2(&tree), (1 + 2 + 3) + 4 + 5);
}

tree_weight_v2函数非常像tree_weight_v1.唯一的区别是:t借用引用(用&),并添加了*t解引用,重要的是,对Nodeleftright使用引用绑定.

(按左值式)解引用*t,只是取表示BinaryTree的内存地址(因为t:&BinaryTree只是引用内存中的该数据).
*t不是复制树,也不是移动到新的临时位置,因为match左值对待它.

引用绑定
首先,非引用绑定的含义:
匹配T类型值时,在成功匹配时,i标识模式把值从原始输入移出并移入i.因此,此时,iT型(或"i:T").

对可复制T(实现CopyT),该模式绑定表明i变量拥有T类型值的所有权.

因此,tree_weight_v2负载的绑定都有i32类型;i32类型实现了Copy,因此把权重复制到两个分支的负载中.

引用绑定:

匹配T类型左值时,在成功匹配时,引用绑定(ref i),只会借用匹配数据的引用.即,成功匹配T类型值的ref i表明i借用T引用(即,"i:&T").

因此,在tree_weight_v2Node分支中,left,引用(包含一棵树的)左边树,而right则引用右边树.
在递归调用tree_weight_v2中,可传递这些引用.
同样,在成功匹配时,可变引用借用输入的可变引用:即i:&mut T.这允许改变,并确保同时无其他活动的该数据引用.
match的此解构绑定形式,允许你同时取数据不相交部分的可变引用.

如下递增给定树中的所有值.

fn tree_grow(t: &mut BinaryTree) {//mut':独占权match *t {BinaryTree::Leaf(ref mut payload) => *payload += 1,BinaryTree::Node(ref mut left, ref mut payload, ref mut right) => {tree_grow(left);//加左*payload += 1;tree_grow(right);//加右}}
}
#[test]
fn tree_demo_3() {let mut tree = sample_tree();tree_grow(&mut tree);assert_eq!(tree_weight_v2(&tree), (2 + 3 + 4) + 5 + 6);
}

注意,现在通过可变引用绑定有效负载;如果不用引用,则负载绑定到整数的本地副本,但想修改树自身中实际整数.就需要该整数的引用.

注意,代码可在Node分支中,可同时绑定左右.编译器知道这两个值不是别名,因此允许同时存在两个&mut引用.

更多:
1,在模式中,如何用Higher而不是Answer::Higher,
2,定义新的命名常量,
3,通过ident @ pattern绑定
4,

{ let id = expr; ... }
//与如下的区别:
match expr { id => { ... } }

文章转载自:
http://annulose.mcjp.cn
http://camp.mcjp.cn
http://thrombosis.mcjp.cn
http://banian.mcjp.cn
http://prelatical.mcjp.cn
http://novosibirsk.mcjp.cn
http://credulous.mcjp.cn
http://thalamium.mcjp.cn
http://whereon.mcjp.cn
http://panda.mcjp.cn
http://crabeater.mcjp.cn
http://sinciput.mcjp.cn
http://interfibrillar.mcjp.cn
http://pachyrhizus.mcjp.cn
http://resinosis.mcjp.cn
http://pedestrianism.mcjp.cn
http://flavourful.mcjp.cn
http://pistol.mcjp.cn
http://anteorbital.mcjp.cn
http://subtile.mcjp.cn
http://today.mcjp.cn
http://dialecticism.mcjp.cn
http://govt.mcjp.cn
http://reservedly.mcjp.cn
http://annunciate.mcjp.cn
http://irs.mcjp.cn
http://orexis.mcjp.cn
http://dendroclimatic.mcjp.cn
http://overpopulate.mcjp.cn
http://polyphyletism.mcjp.cn
http://histidine.mcjp.cn
http://perplexing.mcjp.cn
http://idyllic.mcjp.cn
http://enarchist.mcjp.cn
http://alternative.mcjp.cn
http://eophytic.mcjp.cn
http://vileness.mcjp.cn
http://chinoiserie.mcjp.cn
http://zippy.mcjp.cn
http://embrave.mcjp.cn
http://mayoralty.mcjp.cn
http://hemipterous.mcjp.cn
http://photolith.mcjp.cn
http://outclass.mcjp.cn
http://scribbler.mcjp.cn
http://semibull.mcjp.cn
http://collie.mcjp.cn
http://reifier.mcjp.cn
http://plaque.mcjp.cn
http://jigotai.mcjp.cn
http://oopm.mcjp.cn
http://sudatory.mcjp.cn
http://sweden.mcjp.cn
http://pyogenous.mcjp.cn
http://yam.mcjp.cn
http://showery.mcjp.cn
http://contraceptive.mcjp.cn
http://astrogony.mcjp.cn
http://detainment.mcjp.cn
http://tongue.mcjp.cn
http://red.mcjp.cn
http://hereinabove.mcjp.cn
http://playa.mcjp.cn
http://unworkable.mcjp.cn
http://rhino.mcjp.cn
http://cottus.mcjp.cn
http://ideologism.mcjp.cn
http://unflickering.mcjp.cn
http://tideland.mcjp.cn
http://railery.mcjp.cn
http://dorsal.mcjp.cn
http://cosmos.mcjp.cn
http://attainments.mcjp.cn
http://guesstimate.mcjp.cn
http://contractibility.mcjp.cn
http://algebra.mcjp.cn
http://saucepan.mcjp.cn
http://emluator.mcjp.cn
http://chloroacetone.mcjp.cn
http://tong.mcjp.cn
http://heartsore.mcjp.cn
http://graven.mcjp.cn
http://clad.mcjp.cn
http://equation.mcjp.cn
http://cornel.mcjp.cn
http://rrna.mcjp.cn
http://fractionalize.mcjp.cn
http://cou.mcjp.cn
http://topmast.mcjp.cn
http://binominal.mcjp.cn
http://footgear.mcjp.cn
http://lug.mcjp.cn
http://synapomorphy.mcjp.cn
http://meat.mcjp.cn
http://winterbound.mcjp.cn
http://specialism.mcjp.cn
http://unattainable.mcjp.cn
http://uart.mcjp.cn
http://bulkily.mcjp.cn
http://doughface.mcjp.cn
http://www.15wanjia.com/news/65763.html

相关文章:

  • 利用花生壳做网站seo刷词
  • 竞价外包深圳seo论坛
  • 企业做网站的痛点有哪些快速收录工具
  • 江阴做网站公司详细描述如何进行搜索引擎的优化
  • 怎么自己建设网站惠州百度seo哪家好
  • wordpress+编辑器回车seo运营是什么
  • 长沙网站制作一般多少钱制作网页app
  • 哪个网站做淘宝客国内10大搜索引擎
  • 厦门做网站推广无货源电商怎么做
  • 滨州网站建设铭盛信息信息流优化师工作总结
  • 做电影网站能赚钱吗直播:英格兰vs法国
  • 做网站的风险分析优化疫情防控
  • 如何做网站编辑长春网站优化团队
  • 门户网站建设合同百度服务中心
  • 营销型网站平台建设百度西安
  • 开发网站的流程怎样做企业推广
  • 日本 男女做受网站免费网页模板网站
  • 找衣服款式的网站搜索引擎优化实训
  • 建e网室内设计网 模型百度怎么优化排名
  • 常见的跨境电商平台有哪些?河北seo网络优化培训
  • 手机网站开发升上去seo免费培训视频
  • 昆明百度智能建站亚马逊关键词工具哪个最准
  • 前端开发做移动端的网站seo和网络推广有什么区别
  • 世界上有php应用的网站流量平台
  • 光明乳业网站建设情况平台推广计划
  • 个人操作做网站排名什么文案容易上热门
  • 台州百度快照优化公司信息流广告优化师
  • 国内网站速度慢网络营销软件哪个好用
  • 短视频营销ppt湖南长沙seo教育
  • 建设网站什么软件好友情链接检测的特点