Ê×Ò³
ѧϰ
»î¶¯
רÇø
¹¤¾ß
TVP
·¢²¼
¾«Ñ¡ÄÚÈÝ/¼¼ÊõÉçȺ/ÓŻݲúÆ·,¾¡ÔÚС³ÌÐò
Á¢¼´Ç°Íù

°ëСʱÈëÃÅRust£¬ÕâÊÇһƪRust´úÂë·ç±©

¾Ý˵ºÜ¶à¿ª·¢ÕßÒ»ÌìÈëÃÅ Python£¬Á½ÌìÉÏÊÖ Go£¬µ«µ½ÁË Rust ¾Í»á·¢ÏÖ»­·çÒþÔ¼ÓÐЩ²»¶Ô¡£Ëü´ÓÓï·¨µ½ÌØÐÔ£¬Ëƺõ¶¼Òª¸´ÔÓһЩ¡£±¾ÎĽéÉܵľÍÊÇ Rust£¬×÷Õß±íʾ£¬Í¨¹ý½âÎö´óÁ¿´úÂ룬¡¸°ë¸öСʱ¡¹¾ÍÄÜÈëÃÅ Rust¡£

Rust ÊÇÒ»ÃÅϵͳ±à³ÌÓïÑÔ£¬×¨×¢ÓÚ°²È«£¬ÓÈÆäÊDz¢·¢°²È«¡£ËüÖ§³Öº¯ÊýʽºÍÃüÁîʽÒÔ¼°·ºÐ͵ȱà³Ì·¶Ê½µÄ¶à·¶Ê½ÓïÑÔ£¬ÇÒ TensorFlow µÈÉî¶Èѧϰ¿ò¼ÜÒ²°ÑËü×÷Ϊһ¸öÓÅÐãµÄÇ°¶ËÓïÑÔ¡£

Rust ÔÚÓï·¨ÉÏºÍ C¡¢C++ÀàËÆ£¬¶¼ÓÉ»¨À¨»¡ÏÞ¶¨´úÂë¿é£¬²¢ÓÐÏàͬµÄ¿ØÖÆÁ÷¹Ø¼ü×Ö£¬µ« Rust Éè¼ÆÕßÏëÒªÔÚ±£Ö¤ÐÔÄܵÄͬʱÌṩ¸üºÃµÄÄڴ氲ȫ¡£Rust ×Ô 2016 Äê¾ÍÒѾ­¿ªÔ´ÁË£¬ÔÚ¸÷ÖÖ¿ª·¢Õßµ÷²éÖУ¬ËüÒ²×ÜÄÜ»ñµÃ¡¸×îÊÜ»¶Ó­µÄÓïÑÔ¡¹ÕâÒ»³ÆÔÞ£¬Ä¿Ç°¸Ã¿ªÔ´ÏîÄ¿ÒÑÓÐ 42.9K µÄ Star Á¿¡£

»úÆ÷Ö®ÐĵĶÁÕß´ó¶àÊý¶¼·Ç³£ÊìϤ Python£¬¶ø Rust ¾ÍûÄÇôÊìϤÁË¡£ÔÚ Amos ×î½üµÄһƪ²©ÎÄÖУ¬Ëû±íʾÈç¹ûÔĶÁËûµÄ×÷Æ·£¬ÎÒÃÇ°ë¸öСʱ¾ÍÄÜÈëÃÅ Rust¡£Òò´ËÔÚÕâƪÎÄÕÂÖУ¬ÎÒÃǽ«½éÉܸò©ÎĵÄÖ÷ÒªÄÚÈÝ£¬Ëü²¢²»¹Ø×¢ÓÚ 1 ¸ö»ò¼¸¸ö¹Ø¼ü¸ÅÄÏà·´ËüÏ£Íûͨ¹ý´úÂë¿é×ÝÀÀ Rust µÄ¸÷ÖÖÌØÐÔ£¬°üÀ¨¸÷Öֹؼü´ÊÓë·ûºÅµÄÒâÒå¡£

ÔÚ HackNews ÉÏ£¬ºÜ¶à¿ª·¢Õß±íʾÕâÒ»·ÝÈëÃŽ̷̳dz£ÊµÓã¬Rust µÄÈëÃÅÃż÷±¾À´¾Í±È½Ï¸ß£¬Èç¹ûÔÙ½éÉܸ÷ÖÖ¸´ÔӵĸÅÄîÓëÌØÐÔ£¬ºÜÈÝÒ׳öÏÖ¡¸´ÓÈëÃŵ½È°ÍË¡¹¡£Òò´ËÕâÖÖ´ÓʵÀý´úÂë³ö·¢µÄ½Ì³Ì£¬·Ç³£ÓÐÒâÒå¡£

´Ó±äÁ¿ËµÆð

let Äܰ󶨱äÁ¿£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x;?//?declare?"x"??x?=?42;?//?assign?42?to?"x"??let?x?=?42;?//?combined?in?one?line?

¿ÉÒÔʹÓà £ºÀ´Öƶ¨±äÁ¿µÄÊý¾ÝÀàÐÍ£¬ÒÔ¼°Êý¾ÝÀàÐÍ×¢ÊÍ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x:?i32;?//?`i32`?is?a?signed?32-bit?integer??x?=?42;??//?there's?i8,?i16,?i32,?i64,?i128??//?also?u8,?u16,?u32,?u64,?u128?for?unsigned??let?x:?i32?=?42;?//?combined?in?one?line?

Èç¹ûÄãÉùÃ÷Ò»¸ö±äÁ¿²¢ÔÚ³õʼ»¯Ö®Ç°¾Íµ÷ÓÃËü£¬±àÒëÆ÷»á±¨´í£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x;??foobar(x);?//?error:?borrow?of?possibly-uninitialized?variable:?`x`??x?=?42;?

È»¶ø£¬ÕâÑù×öÍêȫûÎÊÌ⣺

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x;??x?=?42;??foobar(x);?//?the?type?of?`x`?will?be?inferred?from?here?

Ï»®Ïß±íʾÌØÊâµÄÃüÃû£¬»òÕ߸üÈ·ÇеØ˵ÊÇ¡¸È±Ê§µÄÃüÃû¡¹£¬ËüºÍ Python µÄÓ÷¨ÓеãÏñ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?this?does?*nothing*?because?42?is?a?constant??let?_?=?42;??//?this?calls?`get_thing`?but?throws?away?its?result??let?_?=?get_thing();?

ÒÔÏ»®Ïß¿ªÍ·µÄÃüÃûÊdz£¹æÃüÃû£¬Ö»ÊDZàÒëÆ÷²»»á¾¯¸æËüÃÇδ±»Ê¹Óãº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?we?may?use?`_x`?eventually,?but?our?code?is?a?work-in-progress??//?and?we?just?wanted?to?get?rid?of?a?compiler?warning?for?now.??let?_x?=?42;?

ÏàͬÃüÃûµÄµ¥¶À°ó¶¨ÊÇ¿ÉÐеģ¬µÚÒ»´Î°ó¶¨µÄ±äÁ¿»áÈ¡Ïû£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x?=?13;??let?x?=?x?+?3;??//?using?`x`?after?that?line?only?refers?to?the?second?`x`,??//?the?first?`x`?no?longer?exists.?

Rust ÓÐÔª×éÀàÐÍ£¬¿ÉÒÔ½«Æä¿´×÷ÊÇ¡¸²»Í¬Êý¾ÝÀàÐÍÖµµÄ¶¨³¤¼¯ºÏ¡¹¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?pair?=?('a',?17);??pair.0;?//?this?is?'a'??pair.1;?//?this?is?17?

Èç¹ûÕæµÄÏëÅäÖà pair µÄÊý¾ÝÀàÐÍ£¬¿ÉÒÔÕâôд£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?pair:?(char,?i32)?=?('a',?17);?

Ôª×éÔÚ¸³ÖµÊ±¿ÉÒÔ±»²ð½â£¬ÕâÒâζ×ÅËüÃDZ»·Ö½â³É¸÷¸ö×ֶΣº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?(some_char,?some_int)?=?('a',?17);??//?now,?`some_char`?is?'a',?and?`some_int`?is?17?

µ±Ò»¸öº¯Êý·µ»¹Ò»¸öÔª×éʱ»á·Ç³£ÓÐÓãº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?(left,?right)?=?slice.split_at(middle);?

µ±È»£¬Ôڽ⹹һ¸öÔª×éʱ£¬¿ÉÒÔÖ»·ÖÀëËüµÄÒ»²¿·Ö£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?(_,?right)?=?slice.split_at(middle);?

·ÖºÅ±íʾÓï¾äµÄ½áβ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x?=?3;??let?y?=?5;??let?z?=?y?+?x;?

²»¼Ó·ÖºÅÒâζ×ÅÓï¾ä¿ÉÒÔ¿ç¶àÐУº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x?=?vec![1,?2,?3,?4,?5,?6,?7,?8]??.iter()??.map(|x|?x?+?3)??.fold(0,?|x,?y|?x?+?y);?

º¯ÊýÀ´ÁË

fn ÉùÃ÷Ò»¸öº¯Êý¡£ÏÂÃæÊÇÒ»¸ö¿Õº¯Êý£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?greet()?{??println!("Hi?there!");??}?

ÕâÊÇÒ»¸ö·µ»¹ 32 λ´ø·ûºÅÕûÊýÖµµÄº¯Êý¡£¼ýÍ·±íʾ·µ»¹ÀàÐÍ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?fair_dice_roll()?->?i32?{??4??}?

»¨À¨ºÅ±íʾÁËÒ»¸ö´úÂë¿é£¬ÇÒÓµÓÐÆä×Ô¼ºµÄ×÷ÓÃÓò£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?This?prints?"in",?then?"out"??fn?main()?{??let?x?=?"out";??{??//?this?is?a?different?`x`??let?x?=?"in";??println!(x);??}??println!(x);??}?

´úÂë¿éÒ²ÊDZíʾʽ£¬±íʾÆä¼ÆËãΪһ¸öÖµ¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?this:??let?x?=?42;??//?is?equivalent?to?this:??let?x?=?{?42?};?

ÔÚÒ»¸ö´úÂë¿éÖУ¬¿ÉÒÔÓжà¸öÓï¾ä£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x?=?{??let?y?=?1;?//?first?statement??let?z?=?2;?//?second?statement??y?+?z?//?this?is?the?*tail*?-?what?the?whole?block?will?evaluate?to??};?

ÕâÒ²ÊÇΪʲô¡¸Ê¡ÂÔº¯ÊýĩβµÄ·ÖºÅ¡¹µÈͬÓÚ¼ÓÉÏÁË Retrun£¬ÕâЩ¶¼Êǵȼ۵ģº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?fair_dice_roll()?->?i32?{??return?4;??}??fn?fair_dice_roll()?->?i32?{??4??}?

if Ìõ¼þÓï¾äÒ²ÊDZí´ïʽ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?fair_dice_roll()?->?i32?{??if?feeling_lucky?{??6??}?else?{??4??}??}?

match Æ¥ÅäÆ÷Ò²ÊÇÒ»¸ö±í´ïʽ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?fair_dice_roll()?->?i32?{??match?feeling_lucky?{??true?=>?6,??false?=>?4,??}??}?

Dots ͨ³£ÓÃÓÚ·ÃÎÊij¸ö¶ÔÏóµÄ×ֶΣº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?a?=?(10,?20);??a.0;?//?this?is?10??let?amos?=?get_some_struct();??amos.nickname;?//?this?is?"fasterthanlime"?

»òÕßµ÷ÓöÔÏóµÄ·½·¨£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?nick?=?"fasterthanlime";??nick.len();?//?this?is?14?

˫ðºÅÓë´ËÀàËÆ£¬µ«¿É¶ÔÃüÃû¿Õ¼ä½øÐвÙ×÷¡£Ôڴ˾ÙÀýÖУ¬std ÊÇÒ»¸ö crate (~ a library)£¬cmp ÊÇÒ»¸ö module(~ a source file)£¬ÒÔ¼° min ÊǸöº¯Êý£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?least?=?std::cmp::min(3,?8);?//?this?is?3?

use Ö¸Áî¿ÉÓÃÓÚ´ÓÆäËûÃüÃû¿Õ¼äÖС¸ÒýÈ뷶Χ¡¹ÃüÃû£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
use?std::cmp::min;??let?least?=?min(7,?1);?//?this?is?1?

ÔÚ use Ö¸ÁîÖУ¬»¨À¨ºÅ»¹ÓÐÁíÒ»¸öº¬Ò壺¡¸globs¡¹£¬Òò´Ë¿ÉÒÔͬʱµ¼Èë min ÒÔ¼° max£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?this?works:??use?std::cmp::min;??use?std::cmp::max;??//?this?also?works:??use?std::cmp::{min,?max};??//?this?also?works!??use?std::{cmp::min,?cmp::max};?

ͨÅä·û£¨*£©ÔÊÐí´ÓÃüÃû¿Õ¼äµ¼Èë·ûºÅ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?this?brings?`min`?and?`max`?in?scope,?and?many?other?things??use?std::cmp::*;?

Types Ò²ÊÇÃüÃû¿Õ¼äºÍ·½·¨£¬Ëü¿ÉÒÔ×÷Ϊ³£¹æº¯Êýµ÷Óãº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?x?=?"amos".len();?//?this?is?4??let?x?=?str::len("amos");?//?this?is?also?4?

str ÊÇÒ»¸ö»ùÔªÊý¾ÝÀàÐÍ£¬µ«ÔÚĬÈÏÇé¿öÏ£¬Ðí¶à·Ç»ùÔªÊý¾ÝÀàÐÍÒ²ÔÚ×÷ÓÃÓòÖС£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?`Vec`?is?a?regular?struct,?not?a?primitive?type??let?v?=?Vec::new();??//?this?is?exactly?the?same?code,?but?with?the?*full*?path?to?`Vec`??let?v?=?std::vec::Vec::new()?

ÖÁÓÚΪʲô¿ÉÐУ¬ÒòΪ Rust ÔÚÿ¸öÄ£¿éµÄ¿ªÍ·¶¼²åÈëÁË£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
use?std::prelude::v1::*;?

ÔÙ˵˵½á¹¹Ìå

ʹÓà struct ¹Ø¼ü×ÖÉùÃ÷½á¹¹Ì壺

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
struct?Vec2?{??x:?f64,?//?64-bit?floating?point,?aka?"double?precision"??y:?f64,??}?

¿ÉÒÔʹÓýṹÓï¾ä³õʼ»¯£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?v1?=?Vec2?{?x:?1.0,?y:?3.0?};??let?v2?=?Vec2?{?y:?2.0,?x:?4.0?};??//?the?order?does?not?matter,?only?the?names?do?

ÓÐÒ»¸ö¿ì½Ý·½Ê½¿ÉÒÔ´ÓÁíÒ»¸ö½á¹¹Ìå³õʼ»¯±¾½á¹¹ÌåµÄÆäÓà×ֶΣº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?v3?=?Vec2?{??x:?14.0,??..v2??};?

Õâ¾ÍÊÇËùνµÄ¡¸½á¹¹Ìå¸üÐÂÓï·¨¡¹Ö»ÄÜ·¢ÉúÔÚ×îºóÒ»¸öλÖ㬲»ÄÜÔÚÆäºóÃæÔÙ¸úÒ»¸ö¶ººÅ¡£

×¢ÒâÆäÓà×ֶοÉÒÔ±íʾËùÓÐ×ֶΣº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?v4?=?Vec2?{?..v3?};?

½á¹¹ÌåÓëÔª×éÒ»Ñù£¬¿ÉÒÔ±»½â¹¹¡£ÀýÈçÒ»¸öÓÐЧµÄ let ģʽ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
let?(left,?right)?=?slice.split_at(middle);??let?v?=?Vec2?{?x:?3.0,?y:?6.0?};??let?Vec2?{?x,?y?}?=?v;??//?`x`?is?now?3.0,?`y`?is?now?`6.0`??let?Vec2?{?x,?..?}?=?v;??//?this?throws?away?`v.y`?

Èà let ģʽÔÚ if Àï¿ÉÒÔ×÷ΪÌõ¼þ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
struct?Number?{??odd:?bool,??value:?i32,??}??fn?main()?{??let?one?=?Number?{?odd:?true,?value:?1?};??let?two?=?Number?{?odd:?false,?value:?2?};??print_number(one);??print_number(two);??}??fn?print_number(n:?Number)?{??if?let?Number?{?odd:?true,?value?}?=?n?{??println!("Odd?number:?{}",?value);??}?else?if?let?Number?{?odd:?false,?value?}?=?n?{??println!("Even?number:?{}",?value);??}??}??//?this?prints:??//?Odd?number:?1??//?Even?number:?2?

¶à·ÖÖ§µÄ match Ò²ÊÇÌõ¼þģʽ£¬¾ÍÏñ if let£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?print_number(n:?Number)?{??match?n?{??Number?{?odd:?true,?value?}?=>?println!("Odd?number:?{}",?value),??Number?{?odd:?false,?value?}?=>?println!("Even?number:?{}",?value),??}??}??//?this?prints?the?same?as?before?

match ±ØÐëÊÇÄÒÀ¨ËùÓÐÇé¿öµÄµÄ£ºÖÁÉÙÐèҪƥÅäÒ»¸öÌõ¼þ·ÖÖ§¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?print_number(n:?Number)?{??match?n?{??Number?{?value:?1,?..?}?=>?println!("One"),??Number?{?value:?2,?..?}?=>?println!("Two"),??Number?{?value,?..?}?=>?println!("{}",?value),??//?if?that?last?arm?didn't?exist,?we?would?get?a?compile-time?error??}??}?

Èç¹û·Ç³£ÄÑʵÏÖ£¬_ ÄÇô¿ÉÒÔ×÷ÓÃÒ»¸ö¡°°üÂÞÍòÏó¡±µÄģʽ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?print_number(n:?Number)?{??match?n.value?{??1?=>?println!("One"),??2?=>?println!("Two"),??_?=>?println!("{}",?n.value),??}??}?

Type ±ðÃû

ÎÒÃÇ¿ÉÒÔʹÓà type ¹Ø¼ü×ÖÉùÃ÷ÁíÒ»ÀàÐ͵ıðÃû£¬È»ºó¾Í¿ÉÒÔÏñʹÓÃÒ»¸öÕæÕýµÄÀàÐÍÒ»ÑùʹÓÃÕâÖÖÀàÐÍ¡£ÀýÈ綨Òå Name ÕâÖÖÊý¾ÝÀàÐÍΪ×Ö·û´®£¬ºóÃæ¾Í¿ÉÒÔÖ±½ÓʹÓà Name ÕâÖÖÀàÐÍÁË¡£

Äã¿ÉÒÔÔÚ·½·¨ÖÐÉùÃ÷²»Í¬µÄÊý¾ÝÀàÐÍ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
struct?Number?{??odd:?bool,??value:?i32,??}??impl?Number?{??fn?is_strictly_positive(self)?->?bool?{??self.value?>?0??}??}?

È»ºó¾ÍÈçͬÍù³£ÄÇÑùʹÓãº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?minus_two?=?Number?{??odd:?false,??value:?-2,??};??println!("positive??{}",?minus_two.is_strictly_positive());??//?this?prints?"positive??false"??}?

ĬÈÏÇé¿öÏ£¬ÉùÃ÷±äÁ¿ºóËü¾Í¾ÍÊDz»¿É±äµÄ£¬ÈçÏ odd ²»Äܱ»ÖØи³Öµ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?n?=?Number?{??odd:?true,??value:?17,??};??n.odd?=?false;?//?error:?cannot?assign?to?`n.odd`,??//?as?`n`?is?not?declared?to?be?mutable??}?

²»¿É±äµÄ±äÁ¿ÉùÃ÷£¬ÆäÄÚ²¿Ò²ÊDz»¿É±äµÄ£¬ËüÒ²²»ÄÜÖØзÖÅäÖµ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?n?=?Number?{??odd:?true,??value:?17,??};??n?=?Number?{??odd:?false,??value:?22,??};?//?error:?cannot?assign?twice?to?immutable?variable?`n`??}?

mut ¿ÉÒÔʹ±äÁ¿ÉùÃ÷±äΪ¿É±äµÄ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?mut?n?=?Number?{??odd:?true,??value:?17,??}??n.value?=?19;?//?all?good??}?

Traits ÃèÊöµÄÊǶàÖÖÊý¾ÝÀàÐ͵Ĺ²Í¬µã£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
trait?Signed?{??fn?is_strictly_negative(self)?->?bool;??}?

ÎÒÃÇ¿ÉÒÔÔÚÎÒÃǶ¨ÒåµÄ Type ÀàÐÍÖж¨Òå Traits£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
impl?Signed?for?Number?{??fn?is_strictly_negative(self)?->?bool?{??self.value?<?0??}??}??fn?main()?{??let?n?=?Number?{?odd:?false,?value:?-44?};??println!("{}",?n.is_strictly_negative());?//?prints?"true"??}?

ÍⲿÀàÐÍ£¨foreign type£©Öж¨ÒåµÄ Trait£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
impl?Signed?for?i32?{??fn?is_strictly_negative(self)?->?bool?{??self?<?0??}??}??fn?main()?{??let?n:?i32?=?-44;??println!("{}",?n.is_strictly_negative());?//?prints?"true"??}?

impl Ä£¿éͨ³£»á´øÓÐÒ»¸ö Type ÀàÐÍ£¬ËùÒÔÔÚÄ£¿éÄÚ£¬Self ¾Í±íʾ¸ÃÀàÐÍ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
impl?std::ops::Neg?for?Number?{??type?Output?=?Self;??fn?neg(self)?->?Self?{??Self?{??value:?-self.value,??odd:?self.odd,??}??}??}?

ÓÐһЩtraitsÖ»ÊÇ×÷Ϊ±ê¼Ç£¬ËüÃDz¢²»ÊÇ˵ Type ÀàÐÍʵÏÖÁËijЩ·½·¨£¬ËüÖ»ÊDZíÃ÷ijЩ¶«Î÷ÄÜͨ¹ýTypeÀàÐÍÍê³É¡£ÀýÈ磬i32 ʵÏÖÁËCopy£¬ÄÇôÒÔÏ´úÂë¾ÍÊÇ¿ÉÐеģº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?a:?i32?=?15;??let?b?=?a;?//?`a`?is?copied??let?c?=?a;?//?`a`?is?copied?again??}?

ÏÂÃæµÄ´úÂëÒ²ÊÇÄÜÔËÐеģº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?print_i32(x:?i32)?{??println!("x?=?{}",?x);??}??fn?main()?{??let?a:?i32?=?15;??print_i32(a);?//?`a`?is?copied??print_i32(a);?//?`a`?is?copied?again??}?

µ«ÊÇ Number µÄ½á¹¹Ìå²¢²»ÄÜÓÃÓÚ Copy£¬ËùÒÔÏÂÃæµÄ´úÂë»á±¨´í£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?n?=?Number?{?odd:?true,?value:?51?};??let?m?=?n;?//?`n`?is?moved?into?`m`??let?o?=?n;?//?error:?use?of?moved?value:?`n`??}?

ͬÑùÏÂÃæµÄ´úÂëÒ²²»»á Work£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?print_number(n:?Number)?{??println!("{}?number?{}",?if?n.odd?{?"odd"?}?else?{?"even"?},?n.value);??}??fn?main()?{??let?n?=?Number?{?odd:?true,?value:?51?};??print_number(n);?//?`n`?is?moved??print_number(n);?//?error:?use?of?moved?value:?`n`??}?

µ«ÊÇÈç¹ûprint_numberÓÐÒ»¸ö²»¿É±äreference£¬ÄÇô Copy ¾ÍÊÇ¿ÉÐеģº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?print_number(n:?&Number)?{??println!("{}?number?{}",?if?n.odd?{?"odd"?}?else?{?"even"?},?n.value);??}??fn?main()?{??let?n?=?Number?{?odd:?true,?value:?51?};??print_number(&n);?//?`n`?is?borrowed?for?the?time?of?the?call??print_number(&n);?//?`n`?is?borrowed?again??}?

Èç¹ûº¯Êý²ÉÓÃÁ˿ɱäreference£¬ÄÇÒ²ÊÇ¿ÉÐеģ¬Ö»²»¹ýÐèÒªÔÚ±äÁ¿ÉùÃ÷ÖдøÉÏ mut¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?invert(n:?&mut?Number)?{??n.value?=?-n.value;??}??fn?print_number(n:?&Number)?{??println!("{}?number?{}",?if?n.odd?{?"odd"?}?else?{?"even"?},?n.value);??}??fn?main()?{??//?this?time,?`n`?is?mutable??let?mut?n?=?Number?{?odd:?true,?value:?51?};??print_number(&n);??invert(&mut?n);?//?`n?is?borrowed?mutably?-?everything?is?explicit??print_number(&n);??}?

Copy ÕâÀà±ê¼ÇÐ͵Ätraits²¢²»´øÓз½·¨£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?note:?`Copy`?requires?that?`Clone`?is?implemented?too??impl?std::clone::Clone?for?Number?{??fn?clone(&self)?->?Self?{??Self?{?..*self?}??}??}??impl?std::marker::Copy?for?Number?{}?

ÏÖÔÚ Clone ÈÔÈ»¿ÉÒÔÓÃÓÚ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?n?=?Number?{?odd:?true,?value:?51?};??let?m?=?n.clone();??let?o?=?n.clone();??}?

µ«ÊÇNumberµÄÖµ½«²»»áÔÙÒƳý£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
fn?main()?{??let?n?=?Number?{?odd:?true,?value:?51?};??let?m?=?n;?//?`m`?is?a?copy?of?`n`??let?o?=?n;?//?same.?`n`?is?neither?moved?nor?borrowed.??}?

ÓÐһЩtraitsºÜ³£¼û£¬ËüÃÇ¿ÉÒÔͨ¹ýʹÓÃderive ÊôÐÔ×Ô¶¯ÊµÏÖ£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
#[derive(Clone,?Copy)]??struct?Number?{??odd:?bool,??value:?i32,??}??//?this?expands?to?`impl?Clone?for?Number`?and?`impl?Copy?for?Number`?blocks.?

¿´ÉÏÈ¥£¬Õûƪ½Ì³Ì¶¼ÔÚʹÓôóÁ¿´úÂë½âÊÍ Rust µÄ¸÷ÖÖÓï¾äÓëÓ÷¨¡£¿ÉÄÜÎÒÃÇ»á¸Ð¾õ²©¿Í½á¹¹²»ÊÇÌ«Ã÷È·£¬µ«ÊÇʵÀýÇý¶¯µÄ´úÂëѧϰȷʵ¸ü¼Ó¸ßЧ¡£ÓÈÆäÊǶÔÓÚÄÇЩÓÐһЩ±à³Ì»ù´¡µÄͬѧ£¬ËûÃÇ¿ÉÒÔ¿ìËÙץס Rust ÓïÑÔµÄÌصãÓëÂß¼­¡£

×îºó£¬ÕâƪÎÄÕ²¢Ã»ÓÐչʾ²©¿ÍËùÓеÄÄÚÈÝ£¬Èç¹û¶ÁÕßÏëÕæÕýÈëÃÅ Rust ÓïÑÔ£¬ÍƼö¿ÉÒÔ²éÔÄÔ­²©¿Í¡£

  • ·¢±íÓÚ:
  • Ô­ÎÄÁ´½Ó£ºhttp://news.51cto.com/art/202003/612512.htm
  • ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

Ïà¹Ø¿ìѶ

ɨÂë

Ìí¼ÓÕ¾³¤ ½ø½»Á÷Ⱥ

ÁìȡרÊô 10ÔªÎÞÃż÷ȯ

˽Ïí×îР¼¼Êõ¸É»õ

ɨÂë¼ÓÈ뿪·¢ÕßÉçȺ
Áìȯ
http://www.vxiaotou.com